From the Southern Hemisphere

From the Southern Hemisphere

南半球に移住したプログラマの日々

【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で学ぶアルゴリズムとデータ構造 (データサイエンス入門シリーズ)

Pythonで学ぶアルゴリズムとデータ構造 (データサイエンス入門シリーズ)

  • 作者:辻 真吾
  • 発売日: 2019/11/28
  • メディア: 単行本(ソフトカバー)

スポンサー広告