TypeError: "datetime.l'objet datetime n'est pas appelable

j'ai du code Python qui parcourt tous les jours entre deux dates de début. La date de début est toujours le 1er novembre et la date de fin est toujours le 31 mai. Toutefois, le code se répète au fil des ans. Mon code est comme suit:

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...

ce code fonctionne bien jusqu'à ce que le premier cycle soit terminé. Il imprime ensuite les deux valeurs suivantes de 'list1' et 'list2' comme 2001 et 2002 dans le journal, avant de produire l'erreur suivante:

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

il ne semble pas se résoudre l'année attribué à la variable " x " sur ce deuxième passage. Quelqu'un peut me dire pourquoi il en est?

Merci

8
demandé sur gdogg371 2014-08-13 02:26:17

2 réponses

c'est parce que vous avez une variable appelée date c'est l'occultation de importées datetime.date. Utilisez un nom de variable différent.

Démo:

>>> 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
13
répondu alecxe 2014-08-12 22:28:28

je pense que la ligne suivante:

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

est la question. Ici, vous êtes re-définir date pour avoir une valeur différente (qui ne peut pas être appelé) la date de classe (qui peut être).

sur le 'second passage', il arrive à:

d1 = date(x,11,01)

et date n'est pas ce qu'il utilisé pour être (il ne peut pas être appelé), et si vous obtenez le message d'erreur.

peut-être changer le nom de la variable pour être autre chose, par exemple dte?

2
répondu blitzen 2014-08-12 23:18:12