У меня есть код, и он переходит в бесконечность. Я хочу, чтобы, если в командном окне unix, если пользователь вводит ctrl C, я хочу, чтобы программа завершила текущий цикл, а затем вышла из цикла. Поэтому я хочу, чтобы он сломался, но я хочу, чтобы он завершил текущий цикл. Использует ctrl C ok? Должен ли я смотреть на другой вход?Бесконечная петля и пользовательский ввод как завершение
3
A
ответ
3
Чтобы сделать это правильно и точно, как вы хотите, это немного сложно.
В основном вы хотите уловить Ctrl-C, установить флаг и продолжить до начала цикла (или конца), где вы проверяете этот флаг. Это можно сделать с помощью модуля signal
. К счастью, кто-то уже это сделал, и вы можете использовать код в примере linked.
Edit: Основываясь на ваш комментарий ниже, типичное использование класса BreakHandler
является:
ih = BreakHandler()
ih.enable()
for x in big_set:
complex_operation_1()
complex_operation_2()
complex_operation_3()
# Check whether there was a break.
if ih.trapped:
# Stop the loop.
break
ih.disable()
# Back to usual operation
для й в big_set: complex_operation_1() complex_operation_2() complex_operation_3() # Проверьте был перерыв. if ih.trapped: # Остановить цикл. перерыв ih.disable() # Вернуться к обычной работе ... так что для этой части единственное, что мне нужно будет сделать, чтобы начать это если ih.trapped: # Остановить цикл. break ih.disable() в конце моего кода тогда? – Yuki
@Yuki: добавление кода в комментарии теряет свое форматирование, которое испортится с кодом Python, но похоже, что вы в основном правы. Вам нужно сделать 'bh = BreakHandler(); bh.enable() 'перед циклом, конечно. –
у меня есть это: (я не знаю, на данный момент, как превратить код здесь в удобном формате) IH = BreakHandler() ih.enable() в то время как (True): * Делайте все, что * если ih.trapped: break ih.disable() – Yuki