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

Pythonで例外を発生させる方法!raise文の基本と実例をわかりやすく解説

Pythonで例外を発生させるには?

Pythonでは、raiseキーワードを使うことで、意図的に例外(Exception)を発生させることができます。バリデーションエラーの通知や、異常な状態の検出など、プログラムの制御フローを明確にしたい場面で非常に役立ちます。

raise文の基本構文

raise文の基本的な書式は以下のとおりです。

raise [Exception [, args [, traceback]]]

各要素の意味は次のとおりです。

  • Exception:発生させる例外の名前(例:ValueErrorTypeError など)
  • 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文は欠かせない機能です。ぜひ実際のコードで活用してみてください。

  1. 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

  2. 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, \