Есть ли способ, который говорит моей программе выйти?
Для параметра "q" (quit) в моем программном меню у меня есть следующий код:
elif choice == "q":
print()
Это сработало правильно, пока я не поставил его в бесконечном цикле, который сохранял печать пустых строк. Есть ли способ, который может выйти из программы? Иначе вы можете подумать о другом решении?
Ответы
Ответ 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 для более подробной информации.