Pythonで例外を発生させる方法!raise文の基本と実例をわかりやすく解説
Pythonで例外を発生させるには?
Pythonでは、raiseキーワードを使うことで、意図的に例外(Exception)を発生させることができます。バリデーションエラーの通知や、異常な状態の検出など、プログラムの制御フローを明確にしたい場面で非常に役立ちます。
raise文の基本構文
raise文の基本的な書式は以下のとおりです。
raise [Exception [, args [, traceback]]]
各要素の意味は次のとおりです。
- Exception:発生させる例外の名前(例:
ValueError、TypeErrorなど) - args(省略可能):例外に渡す引数の値。エラーメッセージなどを指定できます
- traceback(省略可能):例外に使用するトレースバックオブジェクト
raise文の使用例
以下は、ユーザーから正の整数を入力してもらい、負の数が入力された場合に例外を発生させるサンプルコードです。
# raise_error.py
try:
i = int(input("Enter a positive integer value: "))
if i <= 0:
raise ValueError("This is not a positive number!!")
except ValueError as e:
print(e)
このスクリプトをターミナルから実行し、負の数「-6」を入力すると、次のような結果になります。
$ python raise_error.py Enter a positive integer value: -6 This is not a positive number!!
入力値が0以下だったため、raise ValueError(...)によって例外が発生し、exceptブロックでキャッチされたメッセージが出力されています。
引数なしで例外を発生させる場合
raise文では、例外に引数やメッセージを渡さずに発生させることも可能です。その場合、sys.exc_info()を使うと、発生した例外の詳細情報を取得できます。
# 例外に変数や引数を渡さない場合の例
import sys
try:
i = int(input("Enter a positive integer value: "))
if i <= 0:
raise ValueError
except ValueError as e:
print(sys.exc_info())
実行結果は以下のようになります。
Enter a positive integer value: -9 (<type 'exceptions.ValueError'>, ValueError(), <traceback object at 0x0000000003584EC8>)
出力内容から、例外の型(exceptions.ValueError)、例外オブジェクト、トレースバックオブジェクトの3つの情報がタプルとして返されていることが確認できます。
まとめ
raiseキーワードを使うことで、任意の場所で例外を強制的に発生させられる- 例外にはメッセージなどの引数を渡すことも、省略することもできる
- 発生させた例外は
try-exceptブロックで捕捉し、適切に処理するのが基本 sys.exc_info()を使えば、例外の詳細情報を取得できる
独自のバリデーションやエラーチェックを実装する際に、raise文は欠かせない機能です。ぜひ実際のコードで活用してみてください。
-
Pythonでループ内の例外を処理するには?try-except文の基本と実例
try-except文で例外を捕捉する方法 Pythonでは、try-except文を使用することで、プログラムの実行中に発生した例外(エラー)を捕捉し、プロセスが異常終了するのを防ぐことができます。以下のようにコードを書き直すことで、例外を安全に処理できます。 a = [] foo = redbullz try: for i in foo: a.append(i) print(a[8]) except Exception as e: print(e) このコードを実行すると、次のような出力が得られます。 list index out of range
-
C拡張モジュールからPython例外を発生させて捕捉する方法
C言語で記述した拡張モジュール内でPyErr_SetStringなどのAPIを使って例外を発生させた場合、その例外は通常のPythonコードと同じようにtry-except文で捕捉できます。ここでは、拡張モジュールのビルドから例外の捕捉までの一連の手順を解説します。 1. セットアップスクリプト(setup.py)の作成 まず、C拡張モジュールをビルドするためのsetup.pyスクリプトを用意します。以下のように記述します。 from distutils.core import setup, Extension setup(name=helloworld, version=1.0, \