2015-09-20 3 views
0

Только что возникла проблема, которую я не понимаю в моем коде на Python.Python 3 - Работа с объектами datetime.time - timedelta

timestamps = list(map(lambda ts: ts.time, timestamps)) 
start_timestamps = timestamps 
end_timestamps = timestamps[1:] 
d = date(2000, 1, 1) 
FMT = '%H:%M:%S' 
for i, t1 in enumerate(start_timestamps): 
    t1 = datetime.combine(d, start_timestamps[i]) 
    t2 = datetime.combine(d, end_timestamps[i]) 
    dt = t1 - t2 
    #dt = datetime.strptime(t1,FMT) - datetime.strptime(t2,FMT) 

Используя это в моем Джанго проекте я получаю следующее сообщение об ошибке:

t2 = datetime.combine(d, end_timestamps[i]) 

TypeError: combine() argument 2 must be datetime.time, not bytes

Когда раскомментировать последнюю строку унд комментирует три линии над ним, я получаю следующее:

dt = datetime.strptime(t1,FMT) - datetime.strptime(t2,FMT) 

TypeError: must be str, not datetime.time

Так что г не понимают этого. Это datetime.time, но в то же время это не ... Может ли кто-нибудь мне помочь?

Спасибо!

ответ

1

ваших объектов: bytes объектов, а другие - datetime.time объектов. Другими словами, у вас есть смесь объектов.

Обратите внимание, что это было end_timestamps[i], что не удалось, а не start_timestamps[i], в вашей первой ошибке. Ergo, start_timestamps[i] был объектом time. Если все объекты в timestamps, где bytes объектов, datetime.combine(d, start_timestamps[i]) не удался.

Вам необходимо выяснить, почему ваши ts.time() звонки в ваш map() вызовы возвращают непоследовательные типы данных.

+0

Спасибо, я просто этого не видел. У меня есть еще одна строка, которая добавляет время к списку в end_timestamps, и оно передается функцией, возвращающей объект времени. Но я не могу его преобразовать в объект datetime.time. Вы можете мне помочь? – Johannes

+0

Нет, не совсем. Если вы разместили новый вопрос с [mcve], иллюстрирующий проблему, я мог бы, возможно, так как тогда у меня было бы достаточно информации, чтобы помочь. :-) –

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