以下の違いはありますか?
try:
<some code>
except SomeException as err:
raise err
try:
<some code>
except SomeException:
raise
以下の違いはありますか?
try:
<some code>
except SomeException as err:
raise err
try:
<some code>
except SomeException:
raise
最初のものは、例外が再び発生した時点から例外のスタックトレースを書き直しているため、行で発生したことが示されていますraise err
。2 番目のものは、スタック トレースをそのままにしておくため、 のどこかで発生したことが示され<some code>
ます。
documentation によると、ステートメントを単独で使用するraise
と、現在のスコープでアクティブだった最後の例外が再発生します。raise err
発生させる必要があることを解析しerr[, None, None]
て判断しerr
ます。
これが意味することは、最初のバージョン ( raise err
) がraise err
スタック トレースのベースとして行を提供するということです。裸のraise
ステートメントが出て、最後のエラーに触れずに再発生させます。これにより、元のスタックトレースが保持されます。
# raise err
Traceback (most recent call last):
File "foo.py", line 4, in <module>
raise err
Exception: bar
# raise
Traceback (most recent call last):
File "foo.py", line 2, in <module>
raise Exception('bar')
Exception: bar
はい。except SomeException as err
このチュートリアルのスニペットが示すように、その例外オブジェクトの関数を呼び出すことができます。
except IOError as e: print "I/O error({0}): {1}".format(e.errno, e.strerror)
その後、どちらのスニペットでも再レイズできます。