Ошибка при получении индекса из пустого списка .get_indexes()

#python #python-3.x #listbox #pysimplegui

Вопрос:

Когда я хочу получить индекс выбранного элемента в списке, а список пуст, я получаю сообщение об ошибке.

 window['Listbox'].get_indexes()[0] ------------------------------------ IndexError: tuple index out of range  

Исходный список, который я использую в своей программе, не пуст, но он меняется, поэтому он может быть пустым, и в этом случае, когда я нажимаю на поле списка, программа выходит из строя.

Код:

 import PySimpleGUI as sg  list1 = []  layout = [[sg.Listbox(list1, s=(13, 6), enable_events=True, key='Listbox')]]  window = sg.Window("listbox test 1", layout=layout, size=(100, 100))   while True:  event, values = window.read()  if event == "Exit" or event == sg.WIN_CLOSED:  break  if event == 'Listbox':  print(window['Listbox'].get_indexes()[0])  

Может быть, есть простое решение для этого?

Если нет, то мне придется добавить проверку, пусто ли поле списка или нет.

Комментарии:

1. Почему ты звонишь мне? Значение находится в словаре значений. значения [«Список»] содержит выбранные в данный момент значения. если значения[‘Listbox’]: это все, что вам нужно проверить, нет ли записей. Пусть все будет просто.

2. Разве значения[‘Listbox’] не вернут мне строку? (Элемент из списка) Я ищу интекс.

3. хорошо, тогда вы можете посмотреть его на основе оригинальных вариантов или тоже можете использовать get. Более важный момент заключается в том, что, как правило, всегда проверяйте длину при выполнении индексации во что-либо.

Ответ №1:

Может ли это сработать в вашем случае?

 if event == 'Listbox':  try:  print(window['Listbox'].get_indexes()[0])  except:  print("Empty list")  

Ответ №2:

Все, что требуется, — это оператор if.

 if values['Listbox']: # if something was selected  first_entry = values['Listbox'][0]  window['Listbox'].get_indexes()[0] # if you want the index... it'll be safe because values says there are entries    

Комментарии:

1. Если я попытаюсь: распечатать(значения[‘Listbox’][0]), когда список пуст, программа завершит работу, и я получу эту ошибку: ошибка индекса: индекс списка вне диапазона, так что это, к сожалению, не решает мою проблему.

2. Вот почему вы должны использовать оператор if, чтобы проверить, пусто ли оно. Первое утверждение, утверждение if, имеет важное значение и весь смысл объяснения. Это своего рода основная концепция. Попытка работает, потому что вы все равно получаете ошибку. В коде все еще есть ошибка. Попытка просто ловит его.

3. Хорошо, я попытался проверить, пусто ли поле списка, выполнив следующее: если значения[‘Listbox’][0] == «: Но я все равно получаю ошибку.

4. На самом деле, так и должно быть if values['Listbox'] == []: , и это то же самое, что if values['Listbox']: . Если у вас есть список или кортеж, вы можете проиндексировать его, только если это не пустой список или пустой кортеж. [][0] будет сделано исключение IndexError: list index out of range .

5. Правдивость подойдет только values['Listbox'] для того, если это недостаточно ясно, тогда if len(values['Listbox']): сделаем это. Более важный момент, проблема, проблема заключается в том, что [0] НИКОГДА не может быть выполнено, если сначала не будет добавлено «если» или какая-либо проверка.