2016-12-31 4 views
0

Я пытаюсь написать очень простую программу на Python работать чей-то возраст, и я думаю, что, в теории, он должен работать, однако каждый раз, когда я пытаюсь запустить его, он выдает эту ошибку:Программа для определения возраста дает ошибку о getet_descriptor?

What year were you born in? 2005 
Traceback (most recent call last): 
    File "python", line 5, in <module> 
TypeError: unsupported operand type(s) for -: 'getset_descriptor' and 'int' 

У меня есть попытался превратить datetime.year и (year) (то же самое) в целые числа. Он работал, но не имел никакого значения, поскольку оба они уже являются целыми числами. Это мой код:

from datetime import datetime 
year = datetime.year 
born = input("What year were you born in?") 
born = int(born) 
end = year - born 
print(end) 

ответ

3

year = datetime.year не дает вам текущий год. Это дает вам несвязанный descriptor object вместо (getset_descriptor в вашей ошибке):

>>> datetime.year 
<attribute 'year' of 'datetime.date' objects> 
>>> type(datetime.year) 
<class 'getset_descriptor'> 
>>> datetime.year - 0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for -: 'getset_descriptor' and 'int' 

Не слишком беспокоиться о точном типе объекта здесь, это просто деталь реализации необходимо создавать экземпляры встроенные неизменный тип подобный datetime работа. Это просто означает, что у вас нет экземпляра типа datetime, поэтому для этого экземпляра нет значения year.

Если вы хотите текущий год, используйте datetime.now().year:

year = datetime.now().year 

datetime.now() дает вам datetimeэкземпляр, одна из которых представляет текущее время и дату. У этого экземпляра действительный атрибут year.

Вы также можете использовать datetime.date.today() конечно:

>>> from datetime import datetime, date 
>>> datetime.now() 
datetime.datetime(2016, 12, 31, 14, 58, 14, 994030) 
>>> datetime.now().year 
2016 
>>> date.today().year 
2016 
+0

Я извиняюсь, я не понимаю. Что такое getet_descriptor? – Kiran

+0

Мне нравится, что вы отвечаете, но есть только некоторые части, которые я не понимаю. – Kiran

+0

@Kiran: это внутренний объект на некоторых встроенных типах Python, которые определены в C, где эти объекты не имеют атрибута '__dict__' в экземплярах. Другими словами, подробное описание специалиста, о котором вам обычно не нужно беспокоиться. –

Смежные вопросы