検索

ホームページ  >  に質問  >  本文

python - 为什么这段代码没有异常抛出?

In [8]: def bar():
   ...:     a = 10
   ...:     try:
   ...:         raise
   ...:     except:
   ...:         try:
   ...:             raise
   ...:         except:
   ...:             raise
   ...:     finally:
   ...:         return a


In [9]: bar()
Out[9]: 10
天蓬老师天蓬老师2786日前503

全員に返信(2)返信します

  • 天蓬老师

    天蓬老师2017-04-18 10:30:05

    これは非常に興味深いので、最初にいくつかのコードを実行してみましょう

    1. このコードは、try の層が何層あるかを気にする必要がないことを意味します。実際には、
    を除いて例外がスローされない理由を理解するだけで済みます。 リーリー
    2. このコードは、finally に return ステートメントがある場合は例外がスローされず、return がない場合は例外がスローされることを意味します
    リーリー
    3. 調べてみると、ついに Python を深く理解するためのこの記事が見つかりました。

    f() が例外をスローした後、excel で return を実行するようですが、呼び出し元には戻らず、finally でコードの実行を「持続」します。この時点で、finally の本当の意味がようやく理解できました。つまり、return が行われても、finally 内のコードは実行されなければならないということです。

    ここで、try に exit メソッドを必要とするステートメントがある場合、finally に return メソッドがある場合はすぐに戻り、前の exit ステートメントは実行されないことも理解できます。
    現時点では、このコード文字列を見てみましょう

    リーリー
    4. この時点で、ついに〜
    についてもっと明確になりましたか?

    今すぐ学び、今すぐ販売してください。間違いがある場合は、指摘して修正してください〜

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 10:30:05

    最後に例外がスローされた場合、excel ステートメントは無駄ではありませんか?

    返事
    0
  • キャンセル返事