Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで例外を適切に無視するにはどうすればよいですか?


これは、次のコードで実行できます

try:
x,y =7,0
z = x/y
except:
pass

または

try:
x,y =7,0
z = x/y
except Exception:
pass


これらのコードは、tryステートメントの例外をバイパスし、except句を無視して、例外を発生させません。

上記のコードの違いは、最初のコードは、exceptions.Exceptionではなくexceptions.BaseExceptionから直接派生するKeyboardInterrupt、SystemExitなどもキャッチすることです。

最後にスローされた例外はPythonで記憶されることが知られており、例外スローステートメントに含まれるオブジェクトの一部は次の例外までライブのままになります。パスするだけでなく、次のことを実行したい場合があります。

try:
x,y =7,0
z = x/y
except Exception:
sys.exc_clear()

これにより、最後にスローされた例外がクリアされます


  1. リスト内包表記でPython例外をキャッチする方法は?

    Pythonには例外を処理または無視できる組み込み関数がないため、リスト内包には1つ以上の式が含まれているため、リスト内包のすべての例外を処理することはできません。ステートメントのみが例外をキャッチ/無視/処理できます。 例外が発生しやすい部分式の評価を関数に委任することは、実行可能な回避策の1つです。その他は、例外を発生させる可能性のある値のチェックです。 この問題を処理する方法は、次のコードを使用することです。 例 foo = (5,7,1,0,9) def bar(self): try: return [1/i for i in foo] except ZeroDivisionErro

  2. Python関数が例外をスローすることをどのようにテストしますか?

    関数が予期された例外をスローしない場合にのみ失敗する単体テストを記述します。 Python関数が例外をスローするかどうかもテストします。 たとえば、Pythonの型安全性をテストするためにPythonシェルに貼り付けるサンプルコードを参照してください。 例 import unittest class MyTestCase(unittest.TestCase):    def test_1_cannot_add_int_and_str(self):       with self.assertRaises(TypeError):