Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】try-exceptでValueErrorを捕捉(キャッチ)する方法

ValueErrorは、関数が「型は正しいが値が無効」な引数を受け取ったときに発生する例外です。代表的な例としては、int()関数に数値へ変換できない文字列を渡したケースが挙げられます。

こうした例外は、try-except構文を使うことで安全に捕捉(キャッチ)でき、プログラムが異常終了するのを防ぐことができます。以下のコードは、例外を捕捉して、その内容と型を確認する例です。

コード例

import sys

try:
    n = int('magnolia')  # 数値に変換できない文字列
except Exception as e:
    print(e)             # 例外メッセージを表示
    print(type(e))       # 例外の型を表示

実行結果

invalid literal for int() with base 10: 'magnolia'
<class 'ValueError'>

コードの解説

このコードでは、tryブロック内でint('magnolia')を実行しています。「magnolia」は数値として解釈できない文字列のため、int()関数はValueErrorを発生させます。

except Exception as e:と記述することで発生した例外をすべて捕捉し、変数eに例外オブジェクトを格納します。print(e)でエラーメッセージの内容を、type(e)で例外のクラス(型)を出力しており、これにより「どの種類の例外が発生したのか」をプログラム上で確認できます。

特定の例外だけを捕捉する方法

実際の開発では、Exceptionのように広い範囲を捕捉すると、予期しないバグを見逃してしまう原因になることがあります。ValueErrorだけを明示的に捕捉したい場合は、次のように記述します。

try:
    n = int('magnolia')
except ValueError as e:
    print(f'ValueErrorが発生しました: {e}')

このように書くことで、ValueError以外の例外(たとえばTypeErrorなど)は捕捉されず、本来のエラーとして適切に処理されます。可能な限り、具体的な例外クラスを指定するのが良い書き方とされています。

まとめ

  • ValueErrorは「型は合っているが値が無効」な場合に発生する例外である
  • try-except構文を使えば例外を捕捉し、プログラムのクラッシュを防げる
  • as eで例外オブジェクトを受け取り、メッセージや型を確認できる
  • 実務ではexcept ValueErrorのように、具体的な例外を指定するのが望ましい
  1. Pythonで例外の詳細情報(種類・メッセージ・行番号)を取得する方法

    Pythonの例外情報を取得するとはPythonのコードが例外(Exception)をスローした場合、それを捕捉して、例外の種類、エラーメッセージ、トレースバックを表示できます。さらに、例外が発生したファイル名や行番号といった情報もPythonスクリプト内で取得することが可能です。sys.exc_info()で取得できる3つの要素例外発生時には、type(型)、value(値)、traceback(トレースバック)という3つのパラメータからエラーの詳細を把握できます。type: 発生した例外の種類(クラス)を示します。value: エラーメッセージそのものが格納されています。traceback

  2. PythonでKeyError例外をキャッチする方法をわかりやすく解説

    Pythonでは、辞書(dict)に存在しないキーを使って値へアクセスしようとすると、KeyError例外が発生します。この記事では、try-except文を使ってKeyErrorをキャッチし、例外の種類や詳細情報を確認する方法を解説します。 KeyErrorが発生する仕組み 次のコードは、辞書に存在しないキー c で値を取得しようとしているため、KeyErrorが発生します。sys.exc_info() を使うと、発生した例外の型などの情報を取得できます。 import sys try: s = {a: 5, b: 7}[c] except: print(sys.exc_i