Завершение работы скрипта Python

Я в курсе die() команда в PHP, которая рано останавливает скрипт.

Как я могу это сделать в Python?

10 ответов


import sys
sys.exit()

подробности sys документацию:

sys.exit([arg])

выход из Python. Это осуществляется путем повышения SystemExit исключение, поэтому действия очистки, указанные в предложениях finally из try заявления соблюдаются, и можно перехватить попытка выхода на внешнем уровне.

необязательный аргумент arg может быть целым числом, дающим статус выхода (значение по умолчанию равно нулю) или другой тип объекта. Если это целое число, ноль считается "успешным завершением", и любое ненулевое значение считается "ненормальным окончание" снарядами и тому подобное. Большинство систем требовать, чтобы он находился в диапазоне 0-127, и давать неопределенные результаты иначе. В некоторых системах существует соглашение о присвоении конкретных значения для конкретных кодов выхода, но это, как правило, недоразвитые; программы Unix обычно используют 2 для синтаксиса командной строки ошибки и 1 для всех других видов ошибок. Если другой тип объекта передается, None эквивалентно передаче нуля, а любой другой объект напечатано на stderr и приводит к коду выхода 1. Особенно, sys.exit("some error message") быстрый способ выхода из программы, когда возникает ошибка.

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

обратите внимание, что это "хороший" способ выхода. @glyphtwistedmatrix ниже указывает, что если вы хотите "жесткий выход", вы можете использовать ОС.Для _exit(errorcode), хотя это, вероятно, в какой-то степени специфично для ОС (например, это может не принимать код ошибки под windows), и это определенно менее дружелюбно, поскольку он не позволяет интерпретатору делать какие-либо очистка перед процессом умирает.


простой способ завершить скрипт Python раньше-использовать встроенную функцию quit (). Нет необходимости импортировать какую-либо библиотеку, и это эффективно и просто.

пример:

#do stuff
if this == that:
  quit()

другой способ:

raise SystemExit

В то время как вы обычно предпочитаете 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()

...


Я только что узнал, что при написании multithreadded приложение, raise SystemExit и sys.exit() оба убивают только текущий поток. С другой стороны,--3--> завершается весь процесс. Это обсуждалось здесь.

в приведенном ниже примере есть 2 потока. Кенни и Картман. Картман должен жить вечно, но Кенни называется рекурсивно и должен умереть через 3 секунды. (рекурсивный вызов-не лучший способ, но у меня были другие причины)

если мы также хотим Cartman чтобы умереть, когда Кенни умрет, Кенни должен уйти с 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!");

попробуйте использовать перерыв после цикла используйте quit () или exit ().