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



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



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

545   10  

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()

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

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()

...

Я только что узнал, что при написании многопоточного приложения,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!");

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

Comments

    Ничего не найдено.