Python 2.7.5 (default, Feb 26 2014, 13:43:17)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> try:
... sys.exit()
... except:
... print "in except"
...
in except
>>> try:
... sys.exit(0)
... except:
... print "in except"
...
in except
>>> try:
... sys.exit(1)
... except:
... print "in except"
...
in except
試してsys.exit()をトリガーできないのはなぜですか?
ここに投稿されたコードには、すべてのバージョンの詳細が含まれています。
私はそれをトリガーするために知っているすべての可能な方法を試しましたが、失敗しました。 'except'ブロックに到達します。
前もって感謝します..
sys.exit()
は例外、つまりSystemExit
を発生させます。そのため、except
ブロックに移動します。
この例を見てください:
import sys
try:
sys.exit()
except:
print(sys.exc_info()[0])
これはあなたに与えます:
<type 'exceptions.SystemExit'>
実用的な理由があるとは思えませんが、次の構文を使用できます。
import sys
try:
sys.exit() # this always raises SystemExit
except SystemExit:
print("sys.exit() worked as expected")
except:
print("Something went horribly wrong") # some other exception got raised
python wikiに基づく:
exit() は最終的に「のみ」例外を発生させるため、メインスレッドから呼び出されたときにのみプロセスを終了し、例外はインターセプトされません。
そして:
exit
関数は、プログラムがシグナルによって強制終了されたとき、Python致命的な内部エラーが検出されたとき、またはos._exit()
が呼び出されたときに呼び出されません。
したがって、try
ブロック内でsys.exit()
を使用する場合python SystemExit
例外を発生させた後python = exits
の機能の完了を拒否し、exception
ブロックを実行します。
これで、プログラミングの観点からは、try
ブロックで例外を発生させることが確実にわかっているものを配置する必要は基本的にありません。代わりに、手動で SystemExit
例外を発生させるか、オプションの引数を渡すようにsys.exit()
のそれぞれの機能を失いたくない場合は、よりPython的なアプローチとして発生させることができます。そのコンストラクタに対して、finally
、else
、またはexcept
ブロックでsys.exit()
を呼び出すことができます。
方法1(非推奨)
try:
# do stuff
except some_particular_exception:
# handle this exception and then if you want
# do raise SystemExit
else:
# do stuff and/or do raise SystemExit
finally:
# do stuff and/or do raise SystemExit
方法2(推奨):
try:
# do stuff
except some_particular_exception:
# handle this exception and then if you want
# do sys.exit(stat_code)
else:
# do stuff and/or do sys.exit(stat_code)
finally:
# do stuff and/or do sys.exit(stat_code)