出力にトレースバックダンプを設定せずに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で実行され、を呼び出すコードで行いますfork()
。Unittestは、フォークされたプロセスが発生したときに取得しますSystemExit
。これは間違いなくコーナーケースです!
import sys
sys.exit(1)
のようなものimport sys; sys.exit(0)
?
# Pygame Example
import pygame, sys
from pygame.locals import *
pygame.init()
DISPLAYSURF = pygame.display.set_mode((400, 300))
pygame.display.set_caption('IBM Emulator')
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
fontObj = pygame.font.Font('freesansbold.ttf', 32)
textSurfaceObj = fontObj.render('IBM PC Emulator', True, GREEN,BLACK)
textRectObj = textSurfaceObj.get_rect()
textRectObj = (10, 10)
try:
while True: # main loop
DISPLAYSURF.fill(BLACK)
DISPLAYSURF.blit(textSurfaceObj, textRectObj)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
except SystemExit:
pass