目次
例外処理
l = [1,2,3]
i = 5
l[i]
l = [1,2,3]
i = 5
try:
l[i]
except:
print("リストに含まれない文字を出力しようとしてます")
# リストに含まれない文字を出力しようとしてます- exceptの後にエラーの種類を書き、特定のエラーが発生した場合のみ、処理を実行することも可能
l = [1,2,3]
i = 5
try:
l[i]
except IndexError:
print("リストに含まれない文字を出力しようとしてます")- except エラー種類 as 変数 とすれば、エラーの内容を表示できる
l = [1,2,3]
i = 5
try:
l[i]
except IndexError as ex:
print("Don't worry: {}".format(ex))
# Don't worry: list index out of range- IndexErrorのみエラーハンドリングしていると、他のエラーでは例外処理がなされない
l = [1,2,3]
i = 5
del l
try:
l[i]
except IndexError as ex:
print("Don't worry: {}".format(ex))
- この場合、NameErrorの例外処理を追記する
l = [1,2,3]
i = 5
del l
try:
l[i]
except IndexError as ex:
print("Don't worry: {}".format(ex))
except NameError as ex:
print(ex)
# name 'l' is not defined- IndexErrorでもNameErrorでもないエラーが発生したときは
- except Exceptionと書きます。ただしこの書き方はあまり推奨されない
l = [1,2,3]
i = 5
try:
() + l
except IndexError as ex:
print("Don't worry: {}".format(ex))
except NameError as ex:
print(ex)
except Exception as ex:
print("other:{}".format(ex))
# other:can only concatenate tuple (not "list") to tupleエラーの階層
https://docs.python.org/ja/3/library/exceptions.html#exception-hierarchy
- 一番上に BaseException がある。どんなエラーが発生するかわからない場合は、上位階層の Exception を処理するようにすると、意図しないエラーもキャッチして処理できる
- ただし、Pythonの書き方として、よくわからないエラーもすべてキャッチして次のコードに進むという処理はあまり推奨されない。

finally
- finallyと書くと、最後に必ず実行する処理を書くことが出来る
l = [1,2,3]
i = 5
del l
try:
l[i]
except IndexError as ex:
print("Don't worry: {}".format(ex))
except NameError as ex:
print(ex)
finally:
print('clean up')
# name 'l' is not defined
# clean up- エラーが処理されずプログラムが中断した場合でも、finallyの処理は実行される
l = [1,2,3]
i = 5
try:
l[i]
finally:
print('clean up')
else
- エラー発生しなかったときのみ実行される処理になる
- finallyの処理は、elseの後に実行される
l = [1,2,3]
i = 5
try:
l[0]
except IndexError as ex:
print("Don't worry: {}".format(ex))
except NameError as ex:
print(ex)
else:
print('done')
finally:
print('clean up')
# done
# clean up