#python #datetime #import
#python #дата и время #импорт
Вопрос:
Привет, я обнаружил, что эта проблема проявляется по-разному в разных настройках. У меня была любая из следующих работ, в то время как другие завершались неудачей, и это иногда меняется (то есть один фрагмент завершался неудачей при одной настройке, а другой — при другой)
from datetime import datetime
datetime.datetime.utcnow()
import datetime
datetime.datetime.utcnow()
Например, я только что обновился до python 2.7 с версии 2.6, и первый фрагмент, который до этого работал нормально, выдает ошибки
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
это нормально, но тот же фрагмент работал в версии 2.6, в то время как второй фрагмент не удался. Теперь все наоборот…
Это довольно странная проблема…
Спасибо Harel
Комментарии:
1. У меня была похожая проблема, когда я извлек некоторую логику форматирования даты в отдельный класс форматирования.
datetime.datetime.utcnow()
Вызов отлично работал в исходном классе, но не удался с тем жеAttributeError
, упомянутым выше, в моем новом классе форматирования. Я также думал, что это что-то изменилось между Python 2.6 и 2.7, но в конце концов понял, что проблема заключалась в том, что я поместил свой класс форматирования даты в модуль с именемxxx.format.datetime
, что, конечно, вызвало бы проблему при использованииimport datetime
инструкции и привело бы к сбою всех последующихdatetime
ссылок.
Ответ №1:
Другие ответы здесь верны (ваш импорт неверен), но вот фрагмент, который сделает более понятным, что происходит, когда вы это делаете.
>>> import datetime
>>> type(datetime)
<class 'module'>
>>> type(datetime.datetime)
<class 'type'>
>>> from datetime import datetime
>>> type(datetime)
<class 'type'>
Ответ №2:
ЕСЛИ вы делаете 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)
Комментарии:
1. Согласен, я не могу понять, как это вообще работало — но это сработало… Вот что в этом такого странного. Мало того, что это сработало, я взглянул на производственные серверы, и он работает там с этим кодом…
2. Единственное объяснение, которое я могу придумать, заключается в том, что, поскольку это происходит в приложении Django, возможно, где-то есть ‘import datetime’, который вызывается каким-либо другим компонентом и предотвращает его прерывание.
Ответ №3:
Вы ошибаетесь. Первый фрагмент неверен в обеих версиях.