list在python中不是可调用的错误

时间:2014-02-01 21:27:12

标签: python date datetime runtime-error

我有一个sript的这一部分,转换为一个月和一天的date()函数,我运行它虽然它给我一个列表是不可调用的错误,并说问题是在包含date()函数的行

def current_date(days_traveled):
    #list months
    dt=days_traveled+1
    if dt<=30:
        month=4
        day=dt
    if (dt>=31) and (dt<=61):
        month=5
        day=dt-30
    if (dt>=62) and (dt<=91):
        month=6
        day=dt-61
    if (dt>=92) and (dt<=122):
        month=7
        day=dt-91
    if (dt>=123) and (dt<=153):
        month=8
        day=dt-122
    if (dt>=154) and (dt<=183):
        month=9
        day=dt-153
    if (dt>=184) and (dt<=214):
        month=10
        day=dt-183
    if (dt>=215) and (dt<=244):
        month=11
        day=dt-214
    if (dt>=245) and (dt<=275):
        month=12
        day=dt-244
    year=date(1843,month,day) >>>error is here
    weekday=year.weekday()
    weekday_list=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
    current_day=weekday_list[weekday]
    date_list=[]
    date_list.append(year)
    date_list.append(weekday)
    date_list.append(current_day)
    return date_list

我想这是一个简单的命名错误,但我不知道它是什么。 感谢

1 个答案:

答案 0 :(得分:0)

我不知道你是如何得到这个错误的,但是通过from datetime import date你的脚本可以正常运行而没有任何错误。但这不是问题。

问题是你正在做很多工作来计算python内置的东西。所以我认为你的起点是01/04/1843,对吧?您需要做的就是使用python的datetimetimedelta对象进行集中,让python为您完成工作。然后一切变得更容易,代码更少,错误的机会也更少。

像这样:

from datetime import datetime, timedelta
DEFAULT_DATE = datetime(1843, 4, 1) #this is a constant

def current_date(days_traveled):
    dt = DEFAULT_DATE + timedelta(days=days_traveled+1) #I don't know why +1, so I'm leaving it like that
    year = dt.year
    weekday = dt.weekday()
    current_day = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][weekday]
    return [year, weekday, current_day]

我希望使用datetime.strftime('%Y-%w-%A')来获取一行的所有内容,但该功能在1900年之前的日期不起作用(而且,您将以字符串形式获取所有内容,这可能不是希望的)。

希望有帮助=]