Python:datetime.date“expected datetime,got int”

时间:2015-05-07 19:26:46

标签: python datetime typeerror

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

...
import datetime
...

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

现在,出乎意料的是,我收到一条错误,说“TypeError:descriptor'date'需要'datetime.datetime'对象,但收到'int'”

以前从未发生这种情况,日期时间模块的文档说明应该使用年,月和日参数初始化“日期”对象,这些参数都是INTEGERS。

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

还有其他人看到此错误吗?这实际上是我的代码的顶部(在所有导入之后。)请帮助。

2 个答案:

答案 0 :(得分:2)

正如上面的评论所暗示的那样,您可能已经使用

导入了
from datetime import datetime

也就是说,名称datetime将引用表示日期和时间的类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也是类的名称(用于表示没有小时,分钟等的日期) )在这个模块中:

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

答案 1 :(得分:0)

我认为你正在使用`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)