나는 스크립트를 조기에 중단시키는 PHP의 die()
명령을 알고 있습니다.
파이썬에서 이것을 어떻게 할 수 있습니까?
import sys
sys.exit()
sys.exit([arg])
파이썬을 종료하십시오. 이것은
SystemExit
except를 발생시킴으로써 구현되므로try
statements의 finally 절에 지정된 정리 작업이 가능하며 외부 수준에서 종료 시도를 가로 챌 수 있습니다.선택적 인수 arg 는 종료 상태 (기본값은 0) 또는 다른 유형의 오브젝트를 제공하는 정수가 될 수 있습니다. 정수 인 경우 0은 "성공적인 종료"로 간주되고 0이 아닌 값은 쉘 등으로 "비정상 종료"로 간주됩니다. 대부분의 시스템에서는 0-127 범위에 있어야하며 그렇지 않으면 정의되지 않은 결과를 생성합니다. 일부 시스템은 특정 종료 코드에 특정 의미를 할당하기위한 규칙이 있지만 일반적으로 개발이 미흡합니다. 유닉스 프로그램은 일반적으로 명령 행 구문 오류에 대해 2를 사용하고 다른 모든 종류의 오류에 대해서는 1을 사용합니다. 다른 유형의 객체가 전달되면 None은 0을 전달하는 것과 같고 다른 객체는
stderr
에 인쇄되어 종료 코드가 1이됩니다. 특히sys.exit("some error message")
은 프로그램을 종료 할 때 빠른 방법입니다. 오류가 발생합니다.
exit()
"궁극적으로"유일한 "예외를 제기하기 때문에 메인 스레드에서 호출 될 때 프로세스를 종료하고 예외는 가로 챌 수 없습니다.
이것이 종료하려면 '좋은'방법입니다. @ glyphtwistedmatrix 아래에 지적했듯이 '하드 종료'를 원할 경우 os._exit ( errorcode )를 사용할 수 있습니다. 예를 들어 Windows에서 오류 코드), 프로세스가 종료되기 전에 인터프리터가 정리를 수행하지 않으므로 확실히 덜 친숙합니다.
초기에 파이썬 스크립트를 종료하는 간단한 방법은 내장 함수 quit ()를 사용하는 것입니다. 라이브러리를 가져올 필요가 없으며 효율적이고 간단합니다.
예:
#do stuff
if this == that:
quit()
또 다른 방법은 다음과 같습니다.
raise SystemExit
일반적으로 다른 코드보다 친숙하기 때문에 sys.exit
를 선호해야하지만, 실제로는 예외가 발생합니다.
프로세스를 즉시 종료해야하고 SystemExit
을 catch하는 예외 처리기 내부에있을 수있는 경우 C 레벨에서 즉시 종료되고 정상적인 손상을 수행하지 않는 다른 함수 - os._exit
가 있습니다 통역관의 다운; 예를 들어 "atexit"모듈에 등록 된 후크는 실행되지 않습니다.
단순히 exit()
을 사용할 수도 있습니다.
sys.exit()
, exit()
, quit()
및 os._exit(0)
kill Python 인터프리터를 명심하십시오. 따라서 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 __== '__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 __== '__main__':
main()
...
프로그램이 종료되었습니다.
보다
import sys
def main():
try:
Answer = 1/0
print Answer
except:
print 'Program terminated'
sys.exit()
print 'You wont see this'
if __== '__main__':
main()
...
Main () 파일의 "Z :\Directory\testdieprogram.py"파일의 "Z :\Directory\testdieprogram.py"파일의 "Z :\Directory\testdieprogram.py"메인 sys.exit ( ) SystemExit
편집하다
요점은 프로그램이 부드럽고 평화롭게 끝나는 것입니다. "나는 멈췄다 !!!!"
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!");