2015-05-08 2 views
0
while True: 
    chunks = [] 

    for x in range(len(new_match_list)): 
     if new_match_list[x] == ID_Input: 
      chunks=[new_ID_info_list[x:x+7] for x in range(0, len(new_ID_info_list), 7)] 

    if len(chunks) == 0: 
     ID_Input = input("Please choose a number from the list provided, and enter it correctly this time!") 

    if len(chunks) > 0: 
     print (chunks[x]) 
     break 

У меня проблема с моей программой, где она не обнаруживает ошибки, но внезапно перестает работать, останавливается на минуту, а затем останавливается.Программа Python просто перестает работать?

Например, программа останавливается после получения:

Here is the list of complaint IDs you can choose from and ask about : ['1344139', '1344055', '1343332', '1343188', '1343131', '1341190', '1340441', ] 
Choose a number from that list, and enter it in. Type in 'Quit' if you want to quit the program: 1344139 

..... 

Там нет никакого сообщения об ошибке производится вообще.

Цель кода - распечатать список данных, содержащих 7 информационных элементов (например, индекс, состояние) об определенном идентификационном номере.

Если введенный идентификационный номер отсутствует в моем списке идентификационных номеров (AKA new_match_list), то «куски» останутся пустыми (следовательно, len (chunks) будет 0), и пользователь будет вынужден повторно - введите идентификационный номер, пока он не будет сопоставлен с идентификатором моего (new_match_list).

Если идентификационный номер соответствует, он должен заполнить (куски) и распечатать определенную часть ([x]) (кусков), относящуюся к идентификатору.

Что можно сделать, чтобы исправить эту ошибку?

Edit: Я пробовал разные способы, чтобы исправить эту ошибку, например, подставляя:

len(chunks) == 0: 

с

if ID_Input not in new_match_list: 

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

+1

Выведенный вами результат не будет создан кодом, который вы опубликовали. исправьте это несоответствие. – dbliss

+1

Возможно, вы не должны указывать так много переменных 'x'. У вас есть один в цикле for, один в понимании списка (который находится внутри цикла for) и один в инструкции print (который находится вне цикла). Я даже не хочу думать о том, что на самом деле будет делать этот код. Уберите беспорядок и посмотрите, что произойдет. И, может быть, вы можете сказать нам, как программа, которая «внезапно перестает работать», может приостановиться на минуту, а затем остановиться. Как вы можете сказать? –

ответ

0

Ваш вопрос немного неясно, но я подозреваю, что, когда управление достигает print (chunks[x]) вы хотите x иметь значение, которое он имел, когда был new_match_list[x] == ID_InputTrue. Если это так, вам нужно поставить оператор break в качестве последней строки этого блока if, т. Е. После строки chunks=[new_ID_info_list.... И, как сказал Пол Корнелий, вам нужно изменить переменную в понимании этого списка, чтобы x не сбивался.

Однако, есть лучший способ найти первую соответствующую запись в списке: используйте ее метод .index(). Вам нужно будет положить это внутри блока try: ... except; в качестве альтернативы, используйте оператор in, чтобы проверить, что идентификатор находится в списке, прежде чем пытаться извлечь его индекс.

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