문제

나는 알고있다 die() 스크립트를 일찍 중지하는 PHP의 명령입니다.

Python에서는 어떻게 이 작업을 수행할 수 있나요?

도움이 되었습니까?

해결책

import sys
sys.exit()

자세한 내용은 sys 모듈 문서:

sys.출구([인수])

파이썬을 종료합니다.이는 SystemExit 예외이므로 finally 절에 의해 지정된 정리 작업 의 try 명령문이 존중되며 다음을 가로챌 수 있습니다. 외부 레벨에서 종료 시도.

선택적 인수 인수 종료 상태를 제공하는 정수일 수 있습니다. (기본값은 0) 또는 다른 유형의 객체입니다.정수이면, 0은 "성공적인 종료"로 간주되고 0이 아닌 값은 포탄 등에 의한 "비정상 종료"로 간주됩니다.대부분의 시스템 0-127 범위에 있어야 하며 정의되지 않은 결과를 생성합니다. 그렇지 않으면.일부 시스템에는 특정 특정 종료 코드에 대한 의미이지만 일반적으로 저;유닉스 프로그램은 일반적으로 명령 줄 구문에 2를 사용합니다 오류 및 다른 모든 종류의 오류에 대해 1입니다.다른 유형의 객체 가 전달되고, None은 0을 전달하는 것과 동일하며, 다른 모든 객체는 인쇄 대상 stderr 종료 코드는 1이 됩니다.특히, sys.exit("some error message") 다음과 같은 경우 프로그램을 종료하는 빠른 방법입니다. 오류가 발생합니다.

부터 exit() 궁극적으로 "only"는 예외를 발생시키며, 종료 만 할 것입니다 메인 스레드에서 호출될 때의 프로세스이며 예외는 가로챌.

이것이 종료하는 '좋은' 방법이라는 점에 유의하십시오.@글리프 트위스트 매트릭스 아래에서는 '하드 종료'를 원할 경우 os._exit(에러 코드), 어느 정도는 OS에 따라 다를 수 있지만(예를 들어 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) 죽이다 파이썬 인터프리터.따라서 다른 스크립트에서 호출된 스크립트에 나타나는 경우 execfile(), 두 스크립트의 실행을 중지합니다.

보다 "execfile로 호출된 스크립트 실행 중지"이것을 방지하려면.

from sys import exit
exit()

매개변수로 OS에 반환되는 종료 코드를 전달할 수 있습니다.기본값은 0입니다.

저는 멀티스레드 앱을 작성할 때 다음과 같은 사실을 발견했습니다. raise SystemExit 그리고 sys.exit() 둘 다 실행 중인 스레드만 종료합니다.반면에, os._exit() 전체 프로세스를 종료합니다.이 논의되었다 여기.

아래 예에는 2개의 스레드가 있습니다.케니와 카트먼.Cartman은 영원히 살아야 하지만 Kenny는 재귀적으로 호출되어 3초 후에 죽어야 합니다.(재귀 호출이 최선의 방법은 아니지만 다른 이유가 있었습니다)

Kenny가 죽을 때 Cartman도 죽기를 원한다면 Kenny는 os._exit, 그렇지 않으면 Kenny만이 죽고 Cartman은 영원히 살 것입니다.

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

나는 완전히 초보자이지만 확실히 이것은 더 깨끗하고 더 잘 제어됩니다.

def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        return
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

프로그램 종료됨

~보다

import sys
def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        sys.exit()
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

프로그램이 종료되었습니다. Traceback(가장 최근 호출이 마지막):파일 "Z:\Directory estdieprogram.py", 12행, main() 파일 "Z:\Directory estdieprogram.py", 8행, 기본 sys.exit() 시스템 종료

편집하다

프로그램이 순조롭고 평화롭게 끝나는 것이 포인트입니다. "멈췄어요 !!!!"

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!");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top