代表的な例外
####TypeError
例:TypeError: unsupported operand type(s) for /: 'str' and 'int'
String型を計算しようとしたときなどに起きるエラー
####ZeroDivisionError
例:ZeroDivisionError: division by zero
1/0のようにゼロで割ってしまったときに起きるエラー
####NameError
例:NameError: name 'hoge' is not defined
定義していない変数を使ったときに起きるエラー
####AttributeError
例:AttributeError: type object ‘list’ has no attribute 'fuga'
存在しない属性にアクセスしようとしたときに起きるエラー
Pythonの例外処理ルール
-
try
: 括ったコードを例外処理する -
except <error-case>
: error-caseの例外発生時に実行するブロック -
except
: どんな例外発生時にも実行するブロック -
else
: 例外が発生しなかった場合のみ実行するブロック -
finally
: 例外が発生してもしなくても実行するブロック
try-except
実行した処理でエラーが派生した場合でも処理を継続させたい場合に使用する
Num = [1,2,3]
n = 4
#処理を継続させつつ、エラーを抽出
try:
print(Num[n])
except:
print('エラー') #データがない場合、エラー
print('処理継続')
#出力結果
エラー
処理継続
その他の例外処理
例外が複数ある場合は、例外の種類に応じて処理を分ける
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('エラー内容: {}'.format(ex))
print('例外発生')
#出力結果
エラー内容: list indices must be integers or slices, not str
例外発生
finaly
エラーが発生しても必ずfinaly以下の処理を実行する
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('エラー内容: {}'.format(ex))
finally: #←必ず実行したい処理
print('必ず実行される')
print('例外発生')
#出力結果
エラー内容: list indices must be integers or slices, not str
必ず実行される
例外発生
raiseとpass
故意にエラーを発生させたい場合はraiseを使う
try:
raise TypeError
except:
print('故意にエラーを発生')