【Python】エラー処理 try, except, raise キーワードの使い方
こんにちは、ピコピコくんです。
今日はPythonでのエラー処理 、try, exceptキーワードについて書きました。
エラー処理: try, except
コードの中でエラーが発生する可能性がある箇所を try と except で囲むことで発生する可能性のあるエラーを処理することができます。
下記コードでは try で囲んだ箇所で 0 で除算を行い意図的にエラーを発生させています。エラーが発生すると except で囲んだコードが実行されます。
def error_handling(): try: # 0での除算はエラーになる 10 / 0 except: # エラーが発生した場合に「Error!」と表示する print('Error!') # error_handling 関数を実行 error_handling()
実行結果
Error!
0 で除算しようとしたのでエラーが発生し、except に記述した処理が実行されました。
エラーの種類と任意のエラー処理
エラーには種類があり、組み込み例外としてよく使われるエラーの種類が用意されています。上記のコードではエラーが発生したことはわかりますが、具体的なエラーの内容がわかりません。そこで用意されたエラーの種類を使ってエラーの内容を明確にすることができます。
例えば0で除算されたときは ZeroDivisonError というエラーが発生します。 except キーワードの後に発生するエラーを指定して任意の処理を実行させることができます。
def error_handling(): try: # 0での除算はエラーになる 10 / 0 except ZeroDivisionError: # ZeroDivisionError が発生した場合に実行される print('ZeroDivisionError: 0で除算されました') error_handling()
実行結果
ZeroDivisionError: 0で除算されました
ZeroDivisionError が発生して except ZeroDivisionError: の内容が実行されました。
エラーを発生させる: raise
意図的にエラーを発生させ、エラー発生時の処理を書くこともできます。それには raise キーワードを使います。下記のコードではerror_handling関数の引数 a が数値かどうかを判定し、数値以外の場合はraiseキーワードを使ってValueErrorを発生させています。
def error_handling(a): try: # 引数 a の中身が数値に変換できるか判定 if not(int(a)): # raiseキーワードでValueErrorを発生させる raise ValueError # 0での除算はエラーになる 10 / a except ZeroDivisionError: print('ZeroDivisionError: 0で除算されました') except ValueError: # ValueErrorが発生したら実行される print('ValueError: 引数に数値以外 ' + a + ' が指定されました') except : # エラーが発生した場合に実行される print('何らかのエラーが発生しました') # 引数に数値以外の値 'x' を指定してerror_handling関数を実行 error_handling('x')
実行結果
ValueError: 引数に数値以外 x が指定されました
ValueErrorが発生し、設定したエラーメッセージが表示されました。
参考書籍
Pythonで学ぶアルゴリズムとデータ構造で勉強中です。
Pythonで学ぶアルゴリズムとデータ構造 (データサイエンス入門シリーズ)
- 作者:辻 真吾
- 発売日: 2019/11/28
- メディア: 単行本(ソフトカバー)