2014-02-01 3 views
-1

У меня есть эта часть sript, которая преобразует количество дней, проведенных в месяц и день для функции date(), я запускаю ее, хотя она дает мне список, который не является вызываемой ошибкой и говорит, что проблема заключается в строке, которая содержит функцию даты()список не является вызываемой ошибкой в ​​python

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 

Я полагаю, что некоторые простые ошибки именования, но я не знаю, что это такое. Спасибо

+0

'date' не встроенная функция:' от даты и времени импорта date' –

+0

@AshwiniChaudhary после импорта даты, код работает для меня. Интересно, как OP удалось получить ошибку «list not callable», которую он упоминает. Есть предположения? – yuvi

+1

Глобальная переменная с именем 'date'? Если это так, ему придется переименовать его. – user2357112

ответ

0

Я не знаю, как вы получили эту ошибку, но, выполнив from datetime import date, ваш скрипт работает без ошибок. Но это не проблема.

Проблема в том, что вы много работаете, чтобы вычислить что-то, что построил python. Поэтому я беру его, отправная точка 01/04/1843, правильно? Все, что вам нужно сделать, это использовать объекты python datetime и timedelta в концентрации, и пусть 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 года (а также, вы получите все, что в строка, которая может быть нежелательна).

Надежда, что помогает =]

+0

Я нашел эту проблему в своем тексте, я использовал дату как переменную в другом месте, но на вашем примере. Теперь, когда вы отредактировали это, вы немного поняли меня, мне было интересно, потому что я вышел с будним днем ​​= 6, который в воскресенье, у меня только один вопрос, как список с [рабочим днем] работает в конце одной строки, что он делает точно? – BlendingJake

+0

все работает, спасибо много, что экономит много кода – BlendingJake

+0

Несомненно. Я видел, что другие помогли вам разобраться, откуда появилась ошибка. Что касается части с '[weekday]' в конце, это простой срез, я просто делаю все это в одной строке, то есть '['a', 'b', 'c'] [0]' вернется ''a'' – yuvi

Смежные вопросы