Ошибка Python: индексы списка должны быть целыми числами, а не юникодом - PullRequest
5 голосов
/ 10 мая 2011

моя проблема: я пытаюсь получить все числа из текстового виджета Tkinter (получить текст из файла) следующим образом:

text = self.text_field.get(1.0, 'end')    
s = re.findall("\d+", text)

s возвращает что-то вроде этого:

[u'0', u'15', u'320', u'235', u'1', u'1', u'150', u'50', u'2', u'2', u'20']

, чем я пытаюсь добавить теги к текстовому виджету:

for i in s: self.text_field.tag_add('%s', '5.0', '6.0') %s[i]

и выдает ошибку:

list indices must be integers, not unicode

Спасибо за помощь:)

Ответы [ 2 ]

12 голосов
/ 10 мая 2011

В Python, когда вы делаете

for x in L:
    ...

внутри цикла тела x - это уже элемент списка, а не индекс.

В вашем случае необходимо просто использовать исправление% i вместо % s[i].

Если в других случаях вам нужны и элемент списка, и индексный номер, общая идиома Python:

for index, element in enumerate(L):
    ...
2 голосов
/ 10 мая 2011

В сообщении все сказано. При извлечении i-го элемента списка вы не можете использовать значение Юникода (ни строковое), вам нужно указать целое число i.

Одна вещь, которая не ясна. Если вы уже присваиваете каждому элементу списка s переменную с именем i, то зачем вам снова искать этот список (s[i])? Я бы попробовал с:

for i in s: 
      self.text_field.tag_add('%s', '5.0', '6.0') % i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...