TypeError:' datetime.datetime'对象不可调用

时间:2014-08-12 22:26:17

标签: python time

我有一些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'的年份。谁能告诉我为什么会这样?

由于

2 个答案:

答案 0 :(得分:13)

这是因为您有一个名为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

答案 1 :(得分:2)

我认为以下一行:

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

是个问题。在这里,您要重新定义 date ,以便为日期类(可能是)提供不同的值(无法调用)。

在第二次通过&#39;后,它会转到:

d1 = date(x,11,01)

date 不是以前的版本(它无法调用),因此您会收到错误。

可能将变量名称更改为其他名称,例如DTE?