0

以下の違いはありますか?

try:
    <some code>
except SomeException as err:
    raise err

try:
    <some code>
except SomeException:
    raise
4

3 に答える 3

4

最初のものは、例外が再び発生した時点から例外のスタックトレースを書き直しているため、行で発生したことが示されていますraise err。2 番目のものは、スタック トレースをそのままにしておくため、 のどこかで発生したことが示され<some code>ます。

于 2013-10-17T23:40:34.237 に答える
0

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
于 2013-10-17T23:39:49.453 に答える
0

はい。except SomeException as errこのチュートリアルのスニペットが示すように、その例外オブジェクトの関数を呼び出すことができます。

except IOError as e:
  print "I/O error({0}): {1}".format(e.errno, e.strerror)

その後、どちらのスニペットでも再レイズできます。

于 2013-10-17T23:40:02.987 に答える