298

出力にトレースバックダンプを設定せずにPythonを終了する方法を知りたいです。

それでもエラーコードを返すことができるようにしたいのですが、トレースバックログを表示したくありません。

トレースなしで使用して終了できるようにしたいのですexit(number)が、例外(終了ではない)の場合はトレースが必要です。

4

10 に答える 10

312

おそらく例外が発生しており、これが原因でプログラムが終了しています (トレースバック付き)。したがって、最初に行うことは、きれいに終了する前に、その例外をキャッチすることです (おそらく、メッセージを使用して、例を示します)。

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()
于 2009-07-27T13:10:40.270 に答える
85

おそらく、すべての例外をキャッチしようとしていて、これは?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。これは間違いなくコーナーケースです!

于 2009-07-27T21:55:27.570 に答える
49
import sys
sys.exit(1)
于 2009-07-27T12:45:38.690 に答える
9

のようなものimport sys; sys.exit(0)

于 2009-07-27T12:45:44.320 に答える
-9
# 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
于 2014-06-20T18:21:48.720 に答える