2011-05-03 61 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