我正在自学Python。现在我遇到了一些问题。下面是我的代码,从运行良好的视频中复制出来。
import datetime
print(type(datetime))
d1 = datetime.datetime.now()
print(d1)
当我使用Pycharm & sublime运行代码时,我得到了错误。以下是sublime的错误信息
<class 'module'>
Traceback (most recent call last):
File "D:\programming\python\datetime.py", line 1, in <module>
import datetime
File "D:\programming\python\datetime.py", line 4, in <module>
d1 = datetime.datetime.now()
AttributeError: module 'datetime' has no attribute 'now'
以下是pycharm的错误信息
D:\programming\python\venv\Scripts\python.exe C:\Program Files\JetBrains\PyCharm 2018.1.2\helpers\pydev\pydevconsole.py" 63029 63030
<class 'module'>
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm 2018.1.2\helpers\pydev\pydevconsole.py", line 4, in <module>
from _pydev_imps._pydev_saved_modules import thread
File "C:\Program Files\JetBrains\PyCharm 2018.1.2\helpers\pydev\_pydev_imps\_pydev_saved_modules.py", line 21, in <module>
import xmlrpc.client as xmlrpclib
File "D:\programming\Anoconda3\lib\xmlrpc\client.py", line 134, in <module>
from datetime import datetime
File "D:\programming\python\datetime.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。
我不知道该怎么做,请给我一些建议。谢谢。
发布于 2018-06-03 23:41:18
编辑**
用户自己的自定义datetime.py
模块正在覆盖标准库,下面的信息对于理解为什么会发生这种情况仍然很有用。导入算法首先检查您的即时目录。您可以使用以下命令检查模块文件路径:
print a_module.__file__
欢迎来到疯狂的编程世界。所以,我不确定我是否完全理解你的问题,所以我会试着把一些事情分解一下,留出空间给你讨论。
当您导入datetime时,您导入了称为模块的东西。模块通常被称为名称空间,它们用于在层次结构下创建属性分离,这样您就不会意外地在导入时覆盖其他代码。你可以阅读更多关于它的文章here
datetime模块
提供了以简单和复杂的方式操作日期和时间的类。虽然支持日期和时间算法,但实现的重点是有效的属性提取,以进行输出格式化和操作。有关相关功能,请参阅时间和日历模块。
当您导入它并对其运行type方法时,您应该会看到以下结果:
>>> import datetime
>>> type(datetime)
<class 'module'>
内置类型方法文档说明如下:
4.12.6。类型对象类型对象表示各种对象类型。对象的类型由内置函数type()访问。类型上没有特殊的操作。标准模块类型定义了所有标准内置类型的名称。
当您显式打印该输出时,结果将是相同的:
>>> print(type(datetime))
<class 'module'>
模块在导入时公开属性。您要访问的属性是datetime模块datetime属性,它是一个恰好具有相同名称的类。因此,当您访问它时,它看起来像datetime.datetime
该类支持名为"now“的方法(它也是类的属性,而不是模块)。因此,当您访问该方法时,它看起来像是调用它的datetime.datetime.now()。
如果你想在导入时简化这个层次结构,你可以说明你只想把datetime类从datetime模块中去掉:
from datetime import datetime
#and the access its now method simpler
d1 = datetime.now()
这可能有助于解决属性访问问题,这可能是一个混乱的问题。如果您想更多地澄清您的问题,请随时这样做!
我希望这能帮到你。
发布于 2020-06-18 17:05:57
检查您没有使用通配符导入
from datetime import datetime, timedelta
from some_lib import *
some_lib可能有另一个datetime导入,它会重新定义您的
# in some_lib:
import datetime
发布于 2020-01-22 00:30:16
只需导入_datetime
而不是datetime
示例代码:
import _datetime
today = _datetime.date.today()
print(today)
https://stackoverflow.com/questions/50639415
复制相似问题