출력에 역 추적 덤프를하지 않고 Python을 종료하는 방법을 알고 싶습니다.
여전히 오류 코드를 반환하고 싶지만 역 추적 로그를 표시하고 싶지 않습니다.
exit(number)
추적없이 사용을 종료하고 싶지만 예외 (종료가 아님)의 경우 추적을 원합니다.
답변
아마도 예외가 발생하고 이로 인해 프로그램이 종료되고 있습니다 (추적). 따라서 가장 먼저해야 할 일은 깨끗하게 종료하기 전에 해당 예외를 포착하는 것입니다 (예를 들어 메시지가 표시 될 수 있음).
main
일상 생활 에서 다음과 같이 해보십시오 .
import sys, traceback
def main():
try:
do main program stuff here
....
except KeyboardInterrupt:
print "Shutdown requested...exiting"
except Exception:
traceback.print_exc(file=sys.stdout)
sys.exit(0)
if __name__ == "__main__":
main()
답변
아마도 모든 예외를 잡으려고 노력하고 있으며 이것이 SystemExit
발생한 예외를 잡는 것 sys.exit()
입니까?
import sys
try:
sys.exit(1) # Or something that calls sys.exit()
except SystemExit as e:
sys.exit(e)
except:
# Cleanup and reraise. This will print a backtrace.
# (Insert your cleanup code here.)
raise
일반적으로 except:
예외 이름을 지정하지 않고 사용 하는 것은 좋지 않습니다. 당신이 잡기 원하지 않는 모든 종류의 것들을 잡을 SystemExit
수 있으며, 또한 자신의 프로그래밍 오류를 숨길 수도 있습니다. 정리 측면에서 무언가를하지 않는 한 위의 예는 바보입니다. 다음과 같이 바꿀 수 있습니다.
import sys
sys.exit(1) # Or something that calls sys.exit().
올리지 않고 나가야 할 경우 SystemExit
:
import os
os._exit(1)
unittest 및 calls에서 실행되는 코드 에서이 작업을 수행합니다 fork()
. 분기 된 프로세스가 발생하면 Unittest가 나타납니다 SystemExit
. 이것은 확실히 코너 케이스입니다!
답변
import sys
sys.exit(1)
답변
같은 것 import sys; sys.exit(0)
?
답변
다음 코드는 예외를 발생시키지 않으며 역 추적없이 종료됩니다.
import os
os._exit(1)
자세한 내용은이 질문과 관련 답변 을 참조하십시오. 다른 모든 답변이 너무 복잡 해지는 이유에 놀랐습니다.
답변
sys.exit () 사용을 피하고 대신 예외를 발생 / 처리하여 프로그램이 완전히 종료되도록하는 것이 좋습니다. 역 추적 기능을 끄려면 다음을 사용하십시오.
sys.trackbacklimit=0
스크립트 상단에 모든 트레이스 백 출력을 스쿼시하도록 설정할 수 있지만, 예를 들어 foo.py 파일과 같이 출력을 정리하려는 “알려진 오류”와 같이 좀 더 드물게 사용하는 것을 선호합니다.
import sys
from subprocess import *
try:
check_call([ 'uptime', '--help' ])
except CalledProcessError:
sys.tracebacklimit=0
print "Process failed"
raise
print "This message should never follow an error."
CalledProcessError가 발생하면 출력은 다음과 같습니다.
[me@test01 dev]$ ./foo.py
usage: uptime [-V]
-V display version
Process failed
subprocess.CalledProcessError: Command '['uptime', '--help']' returned non-zero exit status 1
다른 오류가 발생해도 여전히 전체 역 추적 출력을 얻습니다.
답변
내장 된 파이썬 함수 quit ()를 사용하면됩니다. 라이브러리를 가져올 필요가 없습니다. 파이썬 3.4를 사용하고 있습니다.