10 ответов:
import sys sys.exit()подробности
sysдокументацию:
sys.exit([arg])выход из Python. Это реализуется путем повышения
SystemExitисключение, поэтому действия очистки, указанные в предложениях finally изtryзаявления соблюдаются, и можно перехватить попытка выхода на внешний уровень.необязательный аргумент arg может быть целым числом, дающим статус выхода (по умолчанию ноль), или другой тип объекта. Если это целое число, ноль считается "успешным завершением", и любое ненулевое значение равно считается "ненормальным окончанием" по оболочкам и тому подобное. Большинство систем требуйте, чтобы он находился в диапазоне 0-127 и давал неопределенные результаты иначе. Некоторые системы имеют Соглашение для назначения конкретных значения для конкретных кодов выхода, но это, как правило слаборазвитые; программы Unix обычно используют 2 для синтаксиса командной строки ошибки и 1 для всех других видов ошибок. Если другой тип объекта передается, ни один не эквивалентен передаче нуля, и любой другой объект напечатано в
stderrи приводит к коду выхода 1. Особенно,sys.exit("some error message")это быстрый способ выйти из программы, когда возникает ошибка.С
exit()в конечном счете" только " вызывает исключение, оно будет только выходить процесс при вызове из основного потока, и исключение не является перехваченный.обратите внимание, что это "хороший" способ выхода. @glyphtwistedmatrix ниже указано, что если вы хотите "жесткий выход", вы можете использовать ОС.Для _exit(errorcode), хотя это, вероятно, в какой-то степени зависит от ОС (например, он может не принимать код ошибки под windows), и он определенно менее дружелюбен, поскольку он не позволяет интерпретатору делать что-либо очистка перед тем, как процесс умирает.
простой способ досрочного завершения скрипта Python-использовать встроенную функцию quit (). Там нет необходимости импортировать любую библиотеку, и это эффективно и просто.
пример:
#do stuff if this == that: quit()
В то время как вы, как правило, предпочитают
sys.exitпоскольку он более "дружелюбен" к другому коду, все, что он на самом деле делает, это вызывает исключение.Если вы уверены, что вам нужно немедленно выйти из процесса, и вы могли быть внутри обработчика исключений, который будет ловить
SystemExitесть еще одна функция -os._exit- который немедленно завершается на уровне C и не выполняет ни одного нормального разрыва интерпретатора; например, крючки, зарегистрированные с помощью "atexit" модуль не выполняется.
вы также можете использовать просто
exit().имейте в виду, что
sys.exit(),exit(),quit()иos._exit(0)убить интерпретатор Python. Поэтому, если он появляется в скрипте, вызванном из другого скриптаexecfile(), Он останавливает выполнение скриптов.в разделе "остановить выполнение скрипта, вызванного с помощью execfile" чтобы избежать этого.
from sys import exit exit()в качестве параметра можно передать код выхода, который будет возвращен в ОС. По умолчанию-0.
Я полный новичок, но, конечно, это чище и более управляемым
def main(): try: Answer = 1/0 print Answer except: print 'Program terminated' return print 'You wont see this' if __name__ == '__main__': main()...
Я только что узнал, что при написании многопоточного приложения,
raise SystemExitиsys.exit()оба убивает только запущенный поток. С другой стороны,os._exit()завершается весь процесс. Это обсуждалось здесь.пример ниже имеет 2 нити. Кенни и Картман. Картман должен жить вечно, но Кенни называется рекурсивно и должен умереть через 3 секунды. (рекурсивный вызов не лучший способ, но у меня были другие причины)
если мы также хотим Картман умереть, когда Кенни умирает, Кенни должен уйти с
os._exit, иначе только Кенни умрет, а Картман будет жить вечно.import threading import time import sys import os def kenny(num=0): if num > 3: # print("Kenny dies now...") # raise SystemExit #Kenny will die, but Cartman will live forever # sys.exit(1) #Same as above print("Kenny dies and also kills Cartman!") os._exit(1) while True: print("Kenny lives: {0}".format(num)) time.sleep(1) num += 1 kenny(num) def cartman(): i = 0 while True: print("Cartman lives: {0}".format(i)) i += 1 time.sleep(1) if __name__ == '__main__': daemon_kenny = threading.Thread(name='kenny', target=kenny) daemon_cartman = threading.Thread(name='cartman', target=cartman) daemon_kenny.setDaemon(True) daemon_cartman.setDaemon(True) daemon_kenny.start() daemon_cartman.start() daemon_kenny.join() daemon_cartman.join()
в Python 3.5 я попытался включить аналогичный код без использования модулей (например, sys, Biopy), отличных от встроенного, чтобы остановить скрипт и распечатать сообщение об ошибке для моих пользователей. Вот мой пример:
## My example: if "ATG" in my_DNA: ## <Do something & proceed...> else: print("Start codon is missing! Check your DNA sequence!"); exit(); ## as most folks said aboveпозже я обнаружил, что это более лаконично, чтобы просто бросить ошибку:
## My example revised: if "ATG" in my_DNA: ## <Do something & proceed...> else: raise ValueError("Start codon is missing! Check your DNA sequence!");
Comments