今回は、Pythonの例外処理についてのアウトプットをしていく。
正直、現場に入ってコードを書くまでは、if文とかとの使い分けがよくわかってなかったこともあり、今回改めて復習。
try except文を使う理由
使用する主な理由としては、「エラーを検知させること」。
if文は、「条件分岐」
for文は、「繰り返し処理」
try except文は、「エラー検知」
というイメージ。
どんなときに使うのか
実行したい処理でエラーが発生しても処理を継続させたい場合などに用いる。
例を挙げてみる。
Num = [1,2,3,4]
n = 5
#処理を継続させつつ、エラーを抽出することが可能
try:
print(Num[n]) #リストから、5番目のデータを抽出
except:
print('違うよ!!!!') #データがない場合、「違うよ!!!!」とエラーを吐く
print('おにぎり') #たとえエラーでも処理は継続し、「おにぎり」が出力される
#出力結果
違うよ!!!!
おにぎり
当然、Numのリストには、5番目のデータは存在しないのでエラーとして引っかかる。
そして、「おにぎり」が出力される。
特定のエラーのみを検知させる
上記で発生したエラーは正しくはIndexErrorの部類となる。
そのIndexErrorが発生したときのみエラーを検知させる方法↓↓
Num = [1,2,3,4]
n = 5
try:
print(Num[n])
except IndexError as ie: # ieは、変数
print('違うよ!!!!: {}'.format(ie)) #{}内にエラーが表示させる
print('おにぎり')
#出力結果
違うよ!!!!: list index out of range
おにぎり
また、違うエラー用のexcept文を追加した場合、
Num = [1,2,3,4]
n = 5
del n #nを削除
try:
print(Num[n])
except IndexError as ie:
print('違うよ!!!!: {}'.format(ie))
except NameError as ne: #NameErrorを検知して、エラー内容を出力させる
print(ne)
print('おにぎり')
#出力結果
name 'n' is not defined
おにぎり
その他のエラーを検知したい場合
except Exception asを用いる。
Num = [1,2,3,4]
n = 5
n = 'たまご' #すぐに文字列を代入
#処理を継続させつつ、エラーを抽出することが可能
try:
print(Num[n])
except IndexError as ie:
print('違うよ!!!!: {}'.format(ie))
except NameError as ne:
print(ne)
except Exception as ex: #IndexError、NameError以外のエラーが発生した場合
print('other: {}'.format(ex))
print('おにぎり')
↓str型だよ!と怒られる
#出力結果
other: list indices must be integers or slices, not str
おにぎり
finallyを使って必ず実行させる
たとえエラーを検知しても必ず実行させることができるのがfinally↓↓
Num = [1,2,3,4]
n = 5
n = 'たまご'
try:
print(Num[n])
except IndexError as ie:
print('違うよ!!!!: {}'.format(ie))
except NameError as ne:
print(ne)
except Exception as ex:
print('other: {}'.format(ex))
finally: #←必ず実行したい処理
print('絶対実行!')
print('おにぎり')
#出力結果
other: list indices must be integers or slices, not str
絶対実行!
おにぎり
参考教材
酒井潤さんのUdemy教材「Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学び、実践的なアプリ開発の準備をする」
https://www.udemy.com/share/1013hkB0oeeV9XTXo=/