35

引数のない raise ステートメントのドキュメントには、

式が存在しない場合、raise は現在のスコープでアクティブだった最後の例外を再発生させます。

exceptこれは、現在の関数が句を実行している必要があることを意味すると考えていました。この質問を読んで少し実験した後、スタック上の関数は句を実行する必要があることを意味すると思いますが、exceptよくわかりません。また、引数なしのレイズでスタック トレースがどのように機能するのかまったくわからないことに気付きました。

def f():
  try:
    raise Exception
  except:
    g()

def g():
  raise

f()

生産する

Traceback (most recent call last):
  File "foo", line 10, in <module>
    f()
  File "foo", line 5, in f
    g()
  File "foo", line 3, in f
    raise Exception
Exception

それは、最初のレイズ時のスタック、または再レイズ時のスタック、または両方のスタックの連結、または私が理解できるもののようには見えません。

except節を実行するスタック上の関数を探す引数なしの昇給については正しいですか? また、スタック トレースはリレイズでどのように機能しますか?

4

3 に答える 3