“描述符‘ date’需要一个‘ datetime.datetime’对象,但接收到一个‘ int’”疑难解答

在我的代码中,我要求用户输入格式为 dd/mm/yyyy的日期。

currentdate = raw_input("Please enter todays date in the format dd/mm/yyyy: ")
day,month,year = currentdate.split('/')
today = datetime.date(int(year),int(month),int(day))

这将返回错误

TypeError: 描述符‘ date’需要一个‘ datetime.datetime’对象,但是接收到一个‘ int’对象

如果我删除的 int(),然后我结束了同样的错误,只是它说它收到了一个 'str'

我做错了什么?

114539 次浏览

如果我这样做,我可以重现错误

from datetime import *

当我这么做的时候,它就消失了

import datetime

所以检查一下你的进口货。

看起来你已经导入了 datetime.datetime模块而不是 datetime。这应该可以工作:

import datetime
currentdate = raw_input("Please enter todays date in the format dd/mm/yyyy: ")
day,month,year = currentdate.split('/')
today = datetime.date(int(year),int(month),int(day))

或者这个:

from datetime import date
currentdate = raw_input("Please enter todays date in the format dd/mm/yyyy: ")
day,month,year = currentdate.split('/')
today = date(int(year),int(month),int(day))

你是这样进口的吗?

from datetime import datetime

那么你必须把它改成这样:

import datetime

说明: 在第一种情况下,您实际上是在调用 datetime.datetime.date(),这是模块 datetime中对象 datetime上的一个方法。在后一种情况下,使用构造函数 datetime.date()创建一个新的 date()对象。

或者,您可以将导入更改为:

from datetime import datetime, date

然后用 date(y,m,d)(没有 datetime.前缀)构造。

我怀疑 datetime引用的是对象而不是模块。您可能确实有以下代码(可能更复杂) :

from datetime import datetime
currentdate = raw_input("Please enter todays date in the format dd/mm/yyyy: ")
day,month,year = currentdate.split('/')
today = datetime.date(int(year),int(month),int(day))

因此,您调用的是 datetime类的 date方法,而不是 datetime模块的 date函数。

您可以打印 datetime对象来查看是否真的如此:

>>> import datetime
>>> print datetime
<module 'datetime' (built-in)>
>>> print datetime.date(1, 1, 1)
0001-01-01
>>> datetime = datetime.datetime
>>> print datetime
<type 'datetime.datetime'>
>>> print datetime.date(1, 1, 1)


Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
print datetime.date(1, 1, 1)
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'int'

如果你已经这么做了

from datetime import datetime

然后你可以这样构造:

christmas = datetime(2013,12,25)

可以同时使用 datetime 和 datetime.datetime。 像下面这样写导入:

from datetime import datetime
import datetime as dt


time_1 = datetime.strptime('17:00:00', '%H:%M:%S')
time_1 = dt.time(time_1.hour, time_1.minute,  time_1.second)

这个错误表明你的进口看起来没问题。相反,在使用 datetime 执行操作时,请确保首先将值转换为 datetime 格式。

使用 To _ datetime进行相同的操作,然后再对相同的。

TypeError: 描述符‘ date’需要一个‘ datetime.datetime’对象,但是接收到一个‘ int’对象

这是因为您使用了诸如年、月、日之类的变量。

使用这样的东西:

year1, month1, day1 =  [int(d) for d in startDate.split('-')]
print(date(year1, month1, day1))

会成功的。