sys.exit()
トレースバックが生成されないことがわかっている限り、あなたが何を求めているのか完全にはわかりません。コードをそのまま実行しようとするとsys.exit()
、「sys」モジュールをインポートしていないため、未処理のNameError例外が発生します。sys.exit()の呼び出しをtry / exceptionブロックで囲むと、NameError例外がキャプチャされますが、ドキュメントに従って、sys.exit()によって発生した通常の例外もキャプチャされます。
Pythonを終了します。これは、SystemExit例外を発生させることによって実装されるため、tryステートメントのfinally節で指定されたクリーンアップアクションが尊重され、外部レベルでの終了試行をインターセプトすることができます。
エラーが発生すると処理を停止するバージョンを次に示します。
import sys
try:
a = 'i' / 1
print 'Does this work yet?'
except TypeError:
print "I should stop processing now"
sys.exit()
print 'I did not stop processing '
このコードがメインモジュールにある場合は、エントリポイントコードを次のようにラップすることをお勧めします。
import sys
def main():
try:
a = 'i' / 1
print 'Does this work yet?'
except TypeError:
print "I should stop processing now"
return 1
print 'I did not stop processing '
return 0
if __name__ == "__main__": sys.exit(main())
このようにすると、sys.exit()の呼び出しは1回だけになり、問題があったかどうかを示すエラーコードが返されます。コードが最上位のエントリポイントにない場合は、main()メソッドに到達するまで例外をスローし、エラーコード値を返すことをお勧めします。定義する必要のある新しい「StopMyApplicationException」で実際の例外をラップできます。
ああ、そしてトレースバックを印刷したい場合は、traceback
モジュールを使用できます。のようなものtraceback.print_exc()
がその仕事をします。