LoginSignup
3
6

More than 3 years have passed since last update.

基礎知識の補填 Python(例外処理)

Posted at

今回は、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=/

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6