我正在自学Python。现在我遇到了一些问题。下面是我从运行良好的视频中复制的代码。
import datetime
print(type(datetime))
d1 = datetime.datetime.now()
print(d1)
当我使用 Pycharm & sublime 运行代码时出现错误。下面是sublime的错误信息
<class 'module'>
Traceback (most recent call last):
File "D:programmingpythondatetime.py", line 1, in <module>
import datetime
File "D:programmingpythondatetime.py", line 4, in <module>
d1 = datetime.datetime.now()
AttributeError: module 'datetime' has no attribute 'now'
下面是pycharm的错误信息
D:programmingpythonvenvScriptspython.exe C:Program FilesJetBrainsPyCharm 2018.1.2helperspydevpydevconsole.py" 63029 63030
<class 'module'>
Traceback (most recent call last):
File "C:Program FilesJetBrainsPyCharm 2018.1.2helperspydevpydevconsole.py", line 4, in <module>
from _pydev_imps._pydev_saved_modules import thread
File "C:Program FilesJetBrainsPyCharm 2018.1.2helperspydev_pydev_imps_pydev_saved_modules.py", line 21, in <module>
import xmlrpc.client as xmlrpclib
File "D:programmingAnoconda3libxmlrpcclient.py", line 134, in <module>
from datetime import datetime
File "D:programmingpythondatetime.py", line 4, in <module>
d1 = datetime.datetime.now()
AttributeError: module 'datetime' has no attribute 'now'
Process finished with exit code 1
此代码在 IDLE 和 cmd 下运行良好。当我只编码 print(type(datetime))
时它运行良好,但打印双倍类型的日期时间。
我不知道怎么办,请给我一些建议。谢谢。
##### 编辑**:
用户自己的自定义
datetime.py
模块覆盖了标准库,下面的信息仍然有助于理解为什么会发生这种情况。导入算法首先检查您的直接目录。您可以使用以下命令检查模块文件路径:欢迎来到编程的狂野世界。所以,我不确定我是否完全理解你的问题,所以我会尝试分解一些事情并留出空间供你讨论。
当您导入日期时间时,您会导入所谓的模块。无需详细介绍模块就是通常所说的命名空间,它们用于在层次结构下创建属性分离,因此您不会在导入时意外覆盖其他代码。您可以阅读更多关于它的信息 here :
当您导入它并在其上运行 type 方法时,您应该会看到以下结果:
内置类型方法文档说明如下:
当您显式打印该输出时,结果将相同:
模块在导入时公开属性。您正在访问的属性是 datetime 模块 datetime 属性,它是一个恰好具有相同名称的类。因此,当您访问它时,它看起来像 datetime.datetime
该类支持名为“now”的方法(也是类的属性,而不是模块)。因此,当您访问该方法时,它看起来像 datetime.datetime.now() 来调用它。
如果您想在导入时简化此层次结构,您可以澄清您只希望 datetime 类脱离 datetime 模块:
这可能有助于解决属性访问问题,这可能是一个混淆问题。如果您想进一步澄清您的问题,请随时这样做!
我希望这有帮助。