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

Есть ли способ, который говорит моей программе выйти?

Для параметра "q" (quit) в моем программном меню у меня есть следующий код:

elif choice == "q":
    print()

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

4b9b3361

Ответ 1

Один из способов:

sys.exit(0)

Конечно, вам нужно import sys.

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

while True:
    choice = get_input()
    if choice == "a":
        # do something
    elif choice == "q":
        break

Еще один способ - включить основной цикл в функцию и использовать return:

def run():
    while True:
        choice = get_input()
        if choice == "a":
            # do something
        elif choice == "q":
            return

if __name__ == "__main__":
    run()

Единственная причина, по которой вам нужна функция run() при использовании return, заключается в том, что (в отличие от некоторых других языков) вы не можете напрямую return из основной части вашего кода Python (часть, которая не находится внутри функции).

Ответ 2

Фактическим способом завершения программы является вызов

raise SystemExit

Это то, что sys.exit в любом случае.

Простой SystemExit или с None как один аргумент, устанавливает код завершения процесса в ноль. Любое нецелое значение исключения (raise SystemExit("some message")) печатает значение исключения до sys.stderr и устанавливает код выхода в 1. Целочисленное значение устанавливает код завершения процесса в значение:

$ python -c "raise SystemExit(4)"; echo $?
4

Ответ 3

В Python 3 есть функция exit():

elif choice == "q":
    exit()

Ответ 4

См. sys.exit. Эта функция выйдет из вашей программы с заданным статусом выхода.

Ответ 5

Обратите внимание, что решения, основанные на sys.exit() или любом исключении, могут не работать в многопоточной среде.

Так как exit() в конечном итоге "только" вызывает исключение, он выйдет из процесса только при вызове из основного потока, и исключение не будет перехвачено. (doc)

Этот ответ от Alex Martelli для более подробной информации.