2012-10-16 15 views
58

Obserwuję samouczek django, i zdobyć się następujący błąd:typ obiektu 'datetime.datetime' ma atrybut 'datetime'

type object 'datetime.datetime' has no attribute 'datetime'

na następujących linii:

date = datetime.datetime(int(year), int(month), 1) 

Czy ktoś zna przyczynę błędu?

I importowane datetime z from datetime import datetime jeśli pomaga

Dzięki

Odpowiedz

110

Datetime jest modułem, który pozwala na obsługę, terminach i datetimes (z których wszystkie są typy danych). Oznacza to, że datetime jest zarówno modułem najwyższego poziomu, jak i typem w tym module. To jest mylące.

Twój błąd jest prawdopodobnie oparty na mylącym nazewnictwie modułu i tym, który użytkownik lub moduł już zaimportował.

>>> import datetime 
>>> datetime 
<module 'datetime' from '/usr/lib/python2.6/lib-dynload/datetime.so'> 
>>> datetime.datetime(2001,5,1) 
datetime.datetime(2001, 5, 1, 0, 0) 

Ale jeśli importować datetime.datetime:

>>> from datetime import datetime 
>>> datetime 
<type 'datetime.datetime'> 
>>> datetime.datetime(2001,5,1) # You shouldn't expect this to work 
           # as you imported the type, not the module 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: type object 'datetime.datetime' has no attribute 'datetime' 
>>> datetime(2001,5,1) 
datetime.datetime(2001, 5, 1, 0, 0) 

podejrzewam cię lub jeden z modułów jesteś wykorzystaniem importowanych tak: from datetime import datetime.

+2

Dziękujemy! To zadziałało doskonale –

+2

Dziękuję! Jest to mała rzecz do zaniedbania, ale trudna do znalezienia. – Prateek

+2

@jozzas świetna odpowiedź. Miałem problem z timedelta, który został rozwiązany za pomocą twojego rozwiązania. Txs. –

5

Należy użyć

date = datetime(int(year), int(month), 1) 

Albo zmienić

from datetime import datetime 

do

import datetime 
+0

Dziękuję również! –

47

dla Pythona 3,3

from datetime import datetime, timedelta 
futuredate = datetime.now() + timedelta(days=10) 
+8

+1. Myślę, że to powinna być poprawna odpowiedź, ponieważ o ile mi wiadomo, 'import datetime' zawsze powoduje problemy, więc jestem zwolennikiem rozwiązania, które używa' from datetime import datetime'' – jeff

0

Jeśli korzystałeś:

from datetime import datetime 

Następnie wystarczy napisać kod jako:

date = datetime(int(year), int(month), 1) 

Ale jeśli użyłeś:

import datetime 

wtedy tylko można napisać:

date = datetime.datetime(int(2005), int(5), 1) 
0

Powinieneś naprawdę zaimportować Moduł e do własnego aliasu.

import datetime as dt 
my_datetime = dt.datetime(year, month, day) 

Powyższe ma następujące zalety w porównaniu z innymi rozwiązaniami:

  • Wywoływanie zmienna my_datetime zamiast date zmniejsza zamieszanie, ponieważ nie jest już date w module datetime (datetime.date).
  • moduł i klasa (obydwa nazywane datetime) nie cień siebie.
Powiązane problemy