排除"描述符'日期'需要'datetime.datetime'对象,但收到'int'"

Joh*_*ara 47 python datetime

在我的代码中,我要求用户提供格式的日期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))
Run Code Online (Sandbox Code Playgroud)

这将返回错误

TypeError:描述符'date'需要'datetime.datetime'对象但收到'int'

如果我删除int()然后我最终得到相同的错误只是它说它收到了'str'

我究竟做错了什么?

pla*_*aes 48

看来你已经导入了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))
Run Code Online (Sandbox Code Playgroud)

..或这个:

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))
Run Code Online (Sandbox Code Playgroud)


Bol*_*wyn 34

你这样导入吗?

from datetime import datetime
Run Code Online (Sandbox Code Playgroud)

然后你必须改变它看起来像这样:

import datetime
Run Code Online (Sandbox Code Playgroud)

说明:在第一种情况下,您正在有效地调用模块中datetime.datetime.date()对象的方法.在后一种情况下,您使用构造函数创建一个新对象.datetimedatetimedate()datetime.date()

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

from datetime import datetime, date
Run Code Online (Sandbox Code Playgroud)

然后使用date(y,m,d)(不带datetime.前缀)构造.

  • 这非常令人困惑……当您需要同时使用两者时该怎么办? (2认同)

Tim*_*son 12

如果你已经拥有

from datetime import datetime
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样构造:

christmas = datetime(2013,12,25)
Run Code Online (Sandbox Code Playgroud)


Fre*_*Foo 8

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

from datetime import *
Run Code Online (Sandbox Code Playgroud)

当我这样做时它会消失

import datetime
Run Code Online (Sandbox Code Playgroud)

所以检查你的进口.


Syl*_*sne 5

我怀疑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))
Run Code Online (Sandbox Code Playgroud)

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

您可以打印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'
Run Code Online (Sandbox Code Playgroud)


Jea*_*ane 5

您可以同时使用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)
Run Code Online (Sandbox Code Playgroud)