2016-08-26 5 views
0

Я проверил все другие сообщения об этом, но никто не может исправить мою проблему.Объект 'datetime.datetime' не подлежит подписке

Я составил список, в котором хранятся кортежи с идентификатором и объектом datetime. Каждый раз, когда я пытаюсь очистить список, выполните следующие действия: last_encounters = [item for item in last_encounters if item[1] < datetime.utcnow] Я получаю сообщение об ошибке 'datetime.datetime' object is not subscriptable. Это становится довольно раздражающим, я пробовал диктофоны .. не работал.

Также проверено изделие [1], в соответствии с моей печатью это дата.

Даже попытался сменить его на (x,y) for x,y in last_encounters if y < ... также не работал.

Некоторые полезные код:

list = [] 
d_t = datetime.utcfromtimestamp(9000000)  
list += [('lel', d_t)]  
list = [item for item in list if item[1] < datetime.utcnow] 

Я надеюсь, что кто-то может сказать мне, что я делаю неправильно здесь.

Спасибо заранее,

Kevin

+3

Код, который вы отправили, не приведет к возникновению описанной вами ошибки: 'last_encounters' пуст, поэтому список comp просто возвращает пустой список. Отправьте сообщение [MCVE]. – RoadieRich

+0

Я только добавил код, в котором фактически изменен список. Я предполагаю, что он не заполняет пустой список? Я печатал значения, и он не был пустым. Я показал мне значения в элементе кортежа, где второй - точно. – kevintjuh93

+1

В вашем опубликованном коде самая первая строка устанавливает 'last_encounters' в пустой список. Если это не то, что содержится в вашем списке, когда оно попадает в список, вам нужно отправить * это *. – RoadieRich

ответ

1

Когда вы делаете last_encounters += (a, b), вы добавляете две последовательности вместе, last_encounters и (a,b). Это означает, что вы закончили с a и b застряли в конце списка, а не просто добавили кортеж в список.

Есть два варианта, чтобы исправить вашу проблему:

  1. Добавить последовательность, содержащую ваш кортеж:

    last_encounters += [(d["id"], d["d_t"])] 
    
  2. или предпочтительно использовать append метод:

    last_encounters.append((d["id"], d["d_t"])) 
    
+0

Уч, вот и все. Огромное спасибо! – kevintjuh93

0

Попробуйте вызвать utcnow как метод utcnow():

last_encounters = [item for item in last_encounters if item[1] < datetime.utcnow()] 

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

+0

Я верю, что попробовал, но позвольте мне попробовать еще раз ... – kevintjuh93

+0

Я сделал это, и теперь он говорит: не могу сравнить datetime.datetime с str .... odd ... – kevintjuh93

+0

Нам нужно посмотреть, что в списке, который вы пытаетесь очистить, вам нужно добавить это к описанию проблемы. Похоже, что нет строк. – Hanshan

1

Это похоже, ваша проблема заключается в том, как вы добавляете кортеж в список. Вот пример, чтобы показать проблему:

l = [] 
l += ("a", "b") 
print l 

l = [] 
l.append(("a", "b")) 
print l 

Что дает:

>>> ['a', 'b'] 
>>> [('a', 'b')] 

Так list+=tuple эквивалентно вызову list.extend(tuple) и не list.append(tuple) который является то, что вы хотите.

Побочная записка о значении исключения, который был поднят: X is not subscriptable означает, что ваш пытается вызвать этот синтаксис X[some int] пока объект не поддерживает его.

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