Python: datetime.date "expected datetime, got int"

Python: datetime.date "expected datetime, got int"

所以,很长一段时间以来,我一直在 Python 中使用如下代码进行版本跟踪:

...
import datetime
...

"""
Version tracking
"""
__version__ = 4.0
__dateV__ = datetime.date(2015, 5, 7)
...

现在,我突然收到一条错误消息 "TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'int'"

这以前从未发生过,datetime 模块的文档说 "date" 对象应该用年、月、日参数初始化,这些参数都是整数。

我已确认我使用的是 Python 2.7 版。

还有其他人看到过这个错误吗?这确实在我的代码的顶部(在所有导入之后。)请帮忙。

正如上面的评论所建议的那样,您可能已经导入了

from datetime import datetime

也就是说,名称 datetime 将引用 class datetime 一起表示日期和时间(从 datetime 模块导入,令人讨厌的是,同名)。

然后,date 是一种检索 datetime 对象的日期部分的方法:

In [4]: my_date = datetime(2015,5,7,20,02,00)
In [5]: my_date.date()
In [6]: datetime.date(2015, 5, 7)

除了 self 之外,它不接受任何参数(参见 the source),因此如果您使用一个或多个整数参数调用它,它会抱怨:

In [7]: datetime.date(999)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-55d65eb13663> in <module>()
----> 1 datetime.date(999)

TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'int'

在此上下文中,datetime.datedatetime 对象的方法,不知道如何处理 999。以下是等价的:

In [8]: datetime.date(my_date)
Out[8]: datetime.date(2015, 5, 7)

In [9]: my_date.date()
Out[9]: datetime.date(2015, 5, 7)

如果你导入datetime 模块,你可以做你想做的,因为date也是一个class的名称(用于表示此模块中没有小时、分钟等的日期):

In [1]: import datetime
In [2]: datetime.date(2015, 5, 7)    # OK, returns a date object

我认为你正在使用`from datetime import *:

>>> from datetime import *
>>> date = datetime.date(2015, 5, 7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'int'

使用from datetime import date然后:

>>> date = date(2015, 5, 7)

经过仔细检查,我发现错误的根本原因实际上是在我的一个导入语句中。

我的一个模块中有一个错误,但由于某种原因,错误直到行 dateV = datetime.date(5, 7, 2015 )

日期时间模块已正确导入,但回溯让我陷入了困境。注释掉错误模块的导入消除了错误。