Подтвердить что ты не робот

Завершение бесконечного цикла while

В настоящее время у меня есть код, который в основном запускает бесконечный цикл while для сбора данных от пользователей. Постоянное обновление словарей/списков на основе содержимого текстового файла. Для справки:

while (True):
    IDs2=UpdatePoints(value,IDs2)
    time.sleep(10)

В основном, моя проблема в том, что я не знаю, когда я хочу, чтобы это закончилось, но после этого цикла цикла я хочу использовать собранную информацию, а не потерять ее, разбив мою программу. Есть простой, элегантный способ просто выйти из цикла while, когда захочу? Что-то вроде нажатия определенной клавиши на моей клавиатуре было бы потрясающе.

4b9b3361

Ответ 1

Вы можете попробовать обернуть этот код в блок try/except, потому что прерывания клавиатуры - это только исключения:

try:
    while True:
        IDs2=UpdatePoints(value,IDs2)
        time.sleep(10)
except KeyboardInterrupt:
    print('interrupted!')

Затем вы можете выйти из цикла с помощью CTRL-C.

Ответ 2

Вы можете использовать исключения. Но вы должны использовать исключения только для вещей, которые не должны произойти. Поэтому не для этого.

Вот почему я рекомендую сигналы:

import sys, signal
def signal_handler(signal, frame):
    print("\nprogram exiting gracefully")
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

вы должны поместить это в начало своей программы, и когда вы нажимаете ctrl + c, где бы вы ни находились в своей программе, он будет изящно закрыт

Обозначение кода:

Вы импортируете sys и signals. Затем вы выполняете функцию, выполняемую при выходе. sys.exit(0) останавливает программирование с кодом выхода 0 (код, который говорит, все шло хорошо).

Когда программа получает SIGINT либо с помощью ctrl-c, либо командой kill в терминале, программа будет отключена изящно.

Ответ 3

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

except KeyboardInterrupt:
    break

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