确定年龄的程序会给出有关getset_descriptor的错误?

Kir*_*ran 1 python datetime integer typeerror python-3.x

我正在尝试编写一个非常简单的Python程序来确定某人的年龄,并且我认为,从理论上讲,它应该可以工作,但是每次我尝试运行它时,它都会引发以下错误:

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'
Run Code Online (Sandbox Code Playgroud)

我曾尝试转向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)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

year = datetime.year没有给您当前年份。它给您一个未绑定的描述符对象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'
Run Code Online (Sandbox Code Playgroud)

在这里不必太担心对象的确切类型,这只是使诸如datetime工作之类的内置不可变类型的实例所需的实现细节。这只是意味着您没有该类型的实例datetime,因此year该实例也没有任何值。

如果需要当前年份,请使用datetime.now().year

year = datetime.now().year
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • @Kiran:它是一些用 C 定义的 Python 内置类型的内部对象,这些对象在实例上没有 `__dict__` 属性。换句话说,您通常不需要担心的专业实现细节。 (3认同)