この記事では、Python での一般的な例外処理を詳しくリストします。詳細は次のとおりです。
1. 例外とカスタム例外のスロー
Python は例外オブジェクトを使用して異常な状況を表します。エラーが発生すると例外がスローされます。例外オブジェクトが処理されない、またはキャッチされない場合、プログラムはいわゆるトレースバック (エラー メッセージ) を表示して実行を終了します。
①.raise ステートメント
Python の raise キーワードは例外を発生させるために使用されます。これは、以下に示すように、C# および Java の throw キーワードと基本的に同じです。
# -- coding: utf-8 -- def ThorwErr(): raise Exception("抛出一个异常") # Exception: 抛出一个异常 ThorwErr()
import exceptions # ['ArithmeticError', 'AssertionError'.....] print dir(exceptions)
例外をキャッチしたが、それを再発生させたい (例外を渡す) 場合は、パラメーターなしで raise ステートメントを使用できます。
# -- coding: utf-8 -- class MuffledCalculator: muffled = False def calc(self,expr): try: return eval(expr) except ZeroDivisionError: if self.muffled: print 'Division by zero is illegal' else: raise
Python で独自の特別なタイプの例外をカスタマイズすることもできます。Exception クラスから (直接的または間接的に) 継承するだけです。
class SomeCustomException(Exception): pass
C# の try/catch と同様に、Python では次のように try/excel キーワードを使用して例外をキャッチします。
# -- coding: utf-8 -- try: print 2/0 except ZeroDivisionError: print '除数不能为0'
Exception ステートメントは、その後に宣言された例外タイプのみをキャプチャします。他のタイプの例外がスローされる可能性がある場合は、別のException ステートメントを追加するか、次のようなより一般的な例外タイプを指定することもできます。 🎜>
# -- coding: utf-8 -- try: print 2/'0' except ZeroDivisionError: print '除数不能为0' except Exception: print '其他类型异常'
# -- coding: utf-8 -- try: print 2/'0' except (ZeroDivisionError,Exception): print '发生了一个异常'
各例外にはいくつかの例外情報が含まれます。通常、この例外情報を記録する必要があります。
# -- coding: utf-8 -- try: print 2/'0' except (ZeroDivisionError,Exception) as e: # unsupported operand type(s) for /: 'int' and 'str' print e
finally 句は try 句と組み合わせて使用されますが、Except ステートメントとは異なり、try 句内で例外が発生したかどうかに関係なく、finally 句のコードが実行されます。一般に、finally 自体は、ファイルまたはソケットを閉じるためによく使用されます。