Странная проблема импорта даты и времени в Python

#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:

Вы ошибаетесь. Первый фрагмент неверен в обеих версиях.