类型错误:“datetime.datetime”对象的描述符“date”不适用于“int”对象

Jou*_*ill 5 python datetime python-3.x

我刚刚遇到这个问题,在谷歌的首页上找不到合理的答案。它类似于2011 年提出的这个问题,但对于较新版本的 Python,会导致不同的错误消息。

是什么导致这些TypeErrors?

整数

import datetime
my_date = datetime.datetime.date(2021, 3, 2) 
Run Code Online (Sandbox Code Playgroud)

结果报错:

TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'int' object
Run Code Online (Sandbox Code Playgroud)

字符串

同样,用字符串替换整数也会产生相同的错误:

import datetime
my_date = datetime.datetime.date("2021", "3", "2") 
Run Code Online (Sandbox Code Playgroud)

给出:

TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'str' object
Run Code Online (Sandbox Code Playgroud)

列表

使用列表会产生相同的错误:

import datetime
my_date = datetime.datetime.date([2021, 3, 2]) 
Run Code Online (Sandbox Code Playgroud)

结果是:

TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'list' object
Run Code Online (Sandbox Code Playgroud)

同样,使用from datetime import datetimedatetime.date将分别导致以下错误消息:

TypeError: descriptor 'date' for 'datetime' objects doesn't apply to a 'int' object
Run Code Online (Sandbox Code Playgroud)
TypeError: descriptor 'date' for 'datetime' objects doesn't apply to a 'str' object
Run Code Online (Sandbox Code Playgroud)
TypeError: descriptor 'date' for 'datetime' objects doesn't apply to a 'list' object
Run Code Online (Sandbox Code Playgroud)

Jou*_*ill 9

解决方案:

import datetime
my_date = datetime.date(2021, 3, 2)
Run Code Online (Sandbox Code Playgroud)

或者

from datetime import date
my_date = date(2021, 3, 2)
Run Code Online (Sandbox Code Playgroud)

为什么?

问题是这datetime.datetime.date()一个datetime.datetime对象的方法。我们混淆了datetime模块和datetime.datetime类。

我们真正要找的是datetime.date()构造函数