TypeError:'datetime.datetime'对象不是callab

2024-09-28 21:10:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些Python代码,可以在两个开始日期之间的所有日期中迭代。开始日期始终为11月1日,结束日期始终为5月31日。但是,代码将遍历年份。我的代码是这样的:

import time
from datetime import datetime
from datetime import date, timedelta as td

list1 = [2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013]
list2 = [2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014]


for x, y in zip(list1, list2):
    print "list1 - " + str(x)
    print "list2 - " + str(y)


    d1 = date(x,11,01)
    d2 = date(y,5,31)

    delta = d2 - d1



    for i in range(delta.days + 1):

        time1 =  str(d1 + td(days=i))
        time2 = time1.split("-", 1)[0]
        time3 = time1.split("-", -1)[1]
        time4 = time1.rsplit("-", 1)[-1]

        time2 = int(time2)
        time3 = int(time3)
        time4 = int(time4)

        date = datetime(year=time2, month=time3, day=time4)

...some processing here...

在第一个循环完成之前,此代码可以正常工作。然后,它将“list1”和“list2”的下两个值作为2001和2002打印到日志中,然后产生以下错误:

Traceback (most recent call last):
  File "C:\Python27\newtets\newtets\spiders\test3.py", line 17, in <module>
    d1 = date(x,11,01)
TypeError: 'datetime.datetime' object is not callable

它似乎无法解析在第二次传递中分配给变量“x”的年份。有人能告诉我为什么吗?

谢谢


Tags: 代码inimportdatetimedateintd1年份
2条回答

这是因为有一个名为date的变量正在跟踪导入的datetime.date。使用其他变量名。

演示:

>>> from datetime import date, datetime
>>> date(01,11,01)
datetime.date(1, 11, 1)
>>> date = datetime(year=2014, month=1, day=2)
>>> date(01,11,01)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'datetime.datetime' object is not callable

我认为下面这句话:

date = datetime(year=time2, month=time3, day=time4)

才是问题所在。在这里,您将重新定义date以对date类(可能是)具有不同的值(不能调用)。

在“第二次通过”时,它到达:

d1 = date(x,11,01)

而且date不是以前的样子(不能调用它),所以您得到了错误。

也许把变量名改成别的名字,比如dte?

相关问题 更多 >