Skip to main content
 首页 » 编程设计

python之计算年龄的程序给出关于 getset_descriptor 的错误

2025年05月04日15wayfarer

我正在尝试编写一个非常简单的 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' 

我尝试将 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) 

请您参考如下方法:

year = datetime.year 不会为您提供当前年份。它给你一个未绑定(bind)的 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 instance,代表当前时间和日期的那个。该实例具有有效的 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