16

Python で 1 つの except ブロックで例外を発生させ、後の except ブロックでそれをキャッチできるかどうかを知りたいです。他のいくつかの言語はデフォルトでこれを行うと思います。

これがどのように見えるかです」

try:
   something
except SpecificError as ex:
   if str(ex) = "some error I am expecting"
      print "close softly"
   else:
      raise
except Exception as ex:
   print "did not close softly"
   raise

else 句の昇給で、最終の except ステートメントがトリガーされるようにします。

実際には何も印刷していませんが、ログに記録しています。予期しないエラーメッセージである場合は、さらにログを記録したいと考えています。ただし、この追加のログは最後の例外に含まれます。

1つの解決策は、最後のexceptおよびelse句で呼び出される関数がソフトに閉じない場合、関数を作成することだと思います。しかし、それは不必要なようです。

4

4 に答える 4

20

次のようなブロックを除いて、2つのtry...を書くのはどうですか:

try:
    try:
       something
    except SpecificError as ex:
       if str(ex) == "some error I am expecting"
          print "close softly"
       else:
          raise ex
except Exception as ex:
   print "did not close softly"
   raise ex
于 2011-06-09T21:56:00.917 に答える
18

exceptブロック内の 1 つの句のみtryが呼び出されます。例外をより高い位置で捕捉したい場合は、ネストされたtryブロックを使用する必要があります。

于 2011-06-09T21:54:09.677 に答える
1

Pythonチュートリアルによると、1 つの try ステートメントごとに 1 つだけ例外がキャッチされます。エラーフォーマットを正しく使用する方法も示すチュートリアルの非常に簡単な例を見つけることができます。

とにかく、なぜ2番目のものが本当に必要なのですか?これについて詳しく教えていただけますか?

于 2011-06-09T21:59:29.260 に答える