2011-05-03 25 views
4

嗨 我发现这个问题在各种设置上显示不同。 我有以下工作中的任何一个,而其他人失败了,而有时这种变化(即一个片段会失败的一个设置,而其他失败的另一个)奇怪的Python日期时间导入问题

from datetime import datetime 
datetime.datetime.utcnow() 


import datetime 
datetime.datetime.utcnow() 

例如,我有刚刚升级到Python 2.6和2.7的第一个片段,其之前工作的罚款,现在的错误

Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: type object 'datetime.datetime' has no attribute 'datetime'

这是很好的,但同样的片段在2.6的工作,而第二个片段失败。现在,它的逆转......

这是一个相当奇怪的问题......

感谢 哈雷尔

+1

我有一个类似的问题,我已经提取了一些日期格式化逻辑到一个单独的格式化类。 'datetime.datetime.utcnow()'调用在原始类中正常工作,但在我的新格式化类中使用了上述相同的'AttributeError'失败。我也认为这是Python 2.6和2.7之间的变化,但最终意识到问题是我把日期格式化类放到一个名为'xxx.format.datetime'的模块中,当使用这个模块时这会导致问题一个'import datetime'语句,并会导致任何后来的'datetime'引用失败。 – 2011-09-26 11:35:46

回答

4

其他的答案这里是正确的(你输入错误),但这里有一个片段,这将使它更清楚,当你做到这一点发生了什么。

>>> import datetime 
>>> type(datetime) 
<class 'module'> 
>>> type(datetime.datetime) 
<class 'type'> 
>>> from datetime import datetime 
>>> type(datetime) 
<class 'type'> 
0

你就错了。第一个片段在两个版本中都不正确。

4

如果您在做from datetime import datetime,则需要使用datetime.utcnow()而不是datetime.datetime.utcnow()。我不可能看到你的第一个片段有没有的工作。

>>> from datetime import datetime 
>>> datetime.datetime.utcnow() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: type object 'datetime.datetime' has no attribute 'datetime' 
>>> datetime.utcnow() 
datetime.datetime(2011, 5, 3, 14, 10, 36, 30592) 
+0

我同意,我看不出它是如何工作的 - 但是它确实......这真是太奇怪了。它不仅工作,而且还查看了生产服务器,并使用该代码在那里运行... – Harel 2011-05-03 14:36:50

+2

我能想到的唯一解释是,因为这发生在Django应用程序中,所以可能在某处存在“导入日期时间'这是由其他组件调用,并防止这种破坏。 – Harel 2011-05-03 14:40:58