[python] 역 추적없이 파이썬에서 나가는 방법?

출력에 역 추적 덤프를하지 않고 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를 사용하고 있습니다.