Pythonで例外を発生させる:raise

Python には意図的に例外を発生させる raise という機能があります。今回は raise の使い方と、発生した例外の情報を表示する方法について説明します。 

raise の使い方

Python に組み込まれている例外(エラー)に関しては、自動的に例外が発生しますが、自作した関数などで例外を発生させたい場合には raise を使います。

raise の記述方法は以下の通りです。

raise 例外クラス(メッセージ):

例外クラスの引数には例外が発生した原因などを文字列で指定します。この引数は省略することもできます。

以下は、raise を使用して例外を発生させた例です。

try:
    raise ValueError("error!")
except ValueError as e:
    print(e)

実行結果

error!

上の例では、try 節で raise を使用し ValueError クラスの例外を発生させています。try 節で例外が発生したので、 except 節の処理が実行され、エラーメッセージが表示されています。

今回の例では、Python の既存の例外クラスを利用しましたが、独自の例外クラスを作成し、エラー時の詳細な情報を表示することも可能です。

エラー時のスタックトレースを表示する

Python にはトレースバックを扱う traceback モジュールがあります。このモジュールを使うことで、エラー時のスタックトレースを traceback.print_exc() メソッドで表示することができます。

import traceback

try:
    raise Exception
except:
    traceback.print_exc()

実行結果

Traceback (most recent call last):
  File "sample.py", line 4, in <module>
    raise Exception
Exception

上のプログラムを実行すると、スタックトレースが表示されます。エラー時などによく見る表示です。traceback.print_exc() にはファイルを指定することもでき、エラーのログファイルを残しておくこともできます。

import traceback

try:
    raise Exception
except:
    with open("error.log", 'a') as f:
        traceback.print_exc(file=f)

スタックトレースが error.log ファイルに書き込まれていることが確認できます。

$ cat error.log 
Traceback (most recent call last):
  File "sample.py", line 4, in <module>
    raise Exception
Exception

まとめ

今回は raise の使い方について説明しました。raise はエラーが発生したときだけでなく、正常なプログラムの処理のひとつとして使用されることがあります。公開されているライブラリのコードなどを眺めてみて、どのようなときに使用されているのかを確認してみてもいいでしょう。