例外処理
入門Python3 4.11
例外処理の話です。C#にもありましたね
以下の処理は例外が発生します。
ary = [] print(ary[0])
$ py main.py Traceback (most recent call last): File "main.py", line 3, in <module> print(ary[0]) IndexError: list index out of range
これをtry,exceptを使うことで全ての例外をキャッチすることができます。
try: ary = [] print(ary[0]) except: print("error")
$ py main.py error
この時、例外の内容を取りたい場合は以下のようにします。
try: ary = [] print(ary[0]) except Exception as e: print("error:",e)
$ py main.py error: list index out of range
個別に例外をキャッチすることもできます。例えばIndexErrorをキャッチしたい場合は以下のように書きます。
try: ary = [] print(ary[0]) except IndexError as e: print("error",)
$ py main.py error: list index out of range
exceptは複数行に渡って書くこともできます。
try: ary = [] print(ary[0]) except IndexError as e: print("error1:",e) except KeyError as e: print("error2:",e)
$ py main.py error1: list index out of range
try: ary = {} print(ary[0]) except IndexError as e: print("error1:",e) except KeyError as e: print("error2:",e)
$ py main.py error2: 0
また一つのexceptに複数の例外を書くこともできます。
try: ary = [] print(ary[0]) except (IndexError,KeyError) as e: print("error:",e)
$ py main.py error: list index out of range
finallyを使うことで、例外が発生したかしないかに限らずに常に呼ばれる処理を書くことができます。
try: ary = [] print(ary[0]) except IndexError as e: print("error:",e) finally: print("finally")
$ py main.py error: list index out of range finally
elseを使うことで、例外が呼ばれなかった場合、つまり正常に処理が終えた場合の時に呼ばれる処理を書くことができます。
try: ary = [] # 正常終了 except IndexError as e: print("error:",e) else: print("正常終了")
$ py main.py 正常終了
try: ary = [] print(ary[0]) # 例外発生 except IndexError as e: print("error:",e) else: print("正常終了")
$ py main.py error: list index out of range
自分で例外を投げるにはraiseを使います
try: raise IndexError("例外テスト") except IndexError as e: print("error:",e)
$ py main.py error: 例外テスト