我刚刚遇到这个问题,在Google首页找不到一个合理的答案。这与2011年的问题类似,但对于较新版本的Python,会导致不同的错误消息。
是什么导致了这些TypeError
?
import datetime
my_date = datetime.datetime.date(2021, 3, 2)
导致错误:
TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'int' object
字符串同样,用字符串替换整数也会给出相同的错误:
import datetime
my_date = datetime.datetime.date("2021", "3", "2")
给:
TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'str' object
列表和使用列表给出相同的错误:
import datetime
my_date = datetime.datetime.date([2021, 3, 2])
结果:
TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'list' object
同样,使用from datetime import datetime
和datetime.date
将分别导致以下错误消息:
TypeError: descriptor 'date' for 'datetime' objects doesn't apply to a 'int' object
TypeError: descriptor 'date' for 'datetime' objects doesn't apply to a 'str' object
TypeError: descriptor 'date' for 'datetime' objects doesn't apply to a 'list' object
解决方案:
import datetime
my_date = datetime.date(2021, 3, 2)
或
from datetime import date
my_date = date(2021, 3, 2)
为什么?
问题是datetime.datetime.date()
是datetime.datetime
对象上的方法。我们把datetime
模块和datetime.datetime
类搞混了。
我们真正要找的是datetime.date()
构造函数。