所以,很长一段时间以来,我一直在使用Python中的代码进行版本跟踪:
...
import datetime
...
"""
Version tracking
"""
__version__ = 4.0
__dateV__ = datetime.date(2015, 5, 7)
...
现在,出乎意料的是,我收到一条错误,说“TypeError:descriptor'date'需要'datetime.datetime'对象,但收到'int'”
以前从未发生这种情况,日期时间模块的文档说明应该使用年,月和日参数初始化“日期”对象,这些参数都是INTEGERS。
我已经确认我使用的是Python 2.7版。
还有其他人看到此错误吗?这实际上是我的代码的顶部(在所有导入之后。)请帮助。
答案 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.date
是datetime
对象的方法,并且不知道如何处理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)