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