【问题标题】:Python: datetime.date "expected datetime, got int"Python:datetime.date “预期的日期时间,得到 int”
【发布时间】:2015-07-18 13:15:01
【问题描述】:

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

...
import datetime
...

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

现在,出乎意料的是,我收到一条错误消息:“TypeError:描述符 'date' 需要一个 'datetime.datetime' 对象,但收到了一个 'int'”

这在以前从未发生过,datetime 模块的文档说“日期”对象应该使用年、月和日参数进行初始化,这些参数都是整数。

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

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

【问题讨论】:

  • 请发布一个完整的、独立的示例来演示该问题。我怀疑你实际上有from datetime import datetime
  • 我同意 BrenBarn 我可以重现错误如果我这样做import datetime as dt dt.datetime.date(2014,1,1)
  • 您从 typing.Optionaltyping.Union 收到此错误? 问题是导入错误,因为 import datetime 导致 datetime 成为 module,而 from datetime import datetime 导致 datetimetype - 而 typing 仅接受 ŧypes :)

标签: python datetime typeerror


【解决方案1】:

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

【讨论】:

  • from datetime import date not 没有引入 datetime 名称,因此您应该在此处得到 NameError。
  • start python,把你的代码从答案中,看看会发生什么
【解决方案2】:

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

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

日期时间模块已正确导入,但回溯让我大吃一惊。注释掉错误模块的导入可以消除错误。

【讨论】:

  • 您是否使用通配符 (*) 导入?它可以解释为什么从其他模块导入可能会中断datetime.date 调用。
  • 是的,这确实是我一直在做的。我确保只从所述模块中导入我需要的特定类,问题就消失了。
【解决方案3】:

正如上面的 cmets 所建议的,您可能已经导入了

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2020-11-18
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多