2013-05-09 2 views
0

У меня есть две версии, обе из которых не работают по причине, я не могу сказать.Ошибка при вызове datetime.date()

Первая версия

from datetime import datetime, date 

d = datetime.date(2011, 01, 01) 
print(d) 

Что дает

File "timeSince.py", line 3 
    d = datetime.date(2011, 01, 01) 
          ^
SyntaxError: invalid token 

Вторая версия

from datetime import datetime, date 

d = datetime.date(2011, 1, 1) 
print(d) 

Который дает

Traceback (most recent call last): 
    File "timeSince.py", line 3, in <module> 
    d = datetime.date(2011, 1, 1) 
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received 
a 'int' 

Запуск Python 3.3

ответ

3

Вы импортировали даты DateTime, так что это будет работать:

>>> d = date(2011, 1, 1) 
>>> d 
datetime.date(2011, 1, 1) 

нет необходимости ставить Infront

при импорте метод из модуля, вы больше не datetime используйте имя модуля для вызова этого метода, потому что вы импортировали этот конкретный метод!

примечание:

Ваш первый экземпляр является недействительным синтаксис, потому что вы не можете иметь 0 в начале целого числа питона. Вы должны использовать его таким образом: date(2011, 1, 1), а не так: date(2011, 01, 01)

+0

Тем не менее дает ту же ошибку. \t Файл "timeSince.py", линия 3 \t \t d = дата (2011, 01, 01) \t \t \t \t \t \t^ \t SyntaxError: недопустимый маркер –

+1

вы не можете использовать целые числа, начиная с 0 в python! это не работает! Это работает, когда вы используете правильный синтаксис python! –

2

Вы используете целочисленные литералы с ведущими 0 цифры, которые не допускаются в Python 3.

В Python 2, они были истолкованы как восьмеричные значения :

>>> 017 
15 

но синтаксис неоднозначен и сбивает с толку тех, кто не приходит из фона C, и только синтаксис 0o123 с ведущими 0o теперь поддерживается. Старый синтаксис был сделан синтаксической ошибкой, чтобы предотвратить людей, которые do знают синтаксис C-октавы от создания тонких ошибок.

Обе версии пытаются использовать метод datetime.date() без экземпляра. Вы хотите использовать только date() вместо:

>>> from datetime import date, datetime 
>>> date(2011, 1, 1) 
datetime.date(2011, 1, 1) 
>>> datetime 
<type 'datetime.datetime'> 
>>> datetime.date 
<method 'date' of 'datetime.datetime' objects> 
+0

Моя вторая версия в сообщении - нет. –

0

Две отдельные проблемы. Вы не можете писать целые числа с ведущими 0 s (поэтому ваша первая версия не работает), и вы уже импортировали date из модуля datetime, поэтому вам не следует пытаться повторно ссылаться на него (поэтому ваша вторая версия не работает). Ваш код должен выглядеть следующим образом:

from datetime import date 
d = date(2011, 1, 1) 
print(d) # prints "2011-01-01" 
2

Ваш оператор импорта является неправильным (или, по крайней мере, не полезно), так что вы в конечном итоге с помощью метода даты на классе даты и времени (который преобразует DateTimes датам), а не на дату class (который создает даты).

>>> from datetime import datetime, date 
>>> datetime.date 
<method 'date' of 'datetime.datetime' objects> 
>>> datetime.date.__doc__ 
'Return date object with same year, month and day.' 

ли это вместо:

>>> import datetime 
>>> datetime.date(2011,1,1) 
datetime.date(2011, 1, 1) 
>>> datetime.date.__doc__ 
'date(year, month, day) --> date object' 
Смежные вопросы