Pythonのraise文の使い方|コード例を用いてわかりやすく解説

- システム
エンジニア - Pythonのraise文の使い方を教えてください。
- プロジェクト
マネージャー - Pythonのraise文の使い方やコードの例を解説します。
Pythonのraiseとは?
Pythonのraiseとは自分が作った関数やクラスを実行中にエラーが発生した場合、それを外部に伝える例外を発生させるための文です。
raise文で発生させることができる例外は、既存の(組み込み)例外以外にも独自の例外を作成することが可能です。独自の例外クラスを作成することでエラー処理が簡潔に記述できるようになることもあります。
以下に紹介するコマンドやプログラムはPython3上で動作させてください。Python2では動作しません。動作確認はWindows10とPython3.9.1で行いました。
Pythonにおける例外とは?
raise文の前に「例外」について少し解説します。
Pythonの「例外」とは、Pythonのプログラム実行中に発生するエラー(ランタイムエラー)のことを「例外」と呼んでいます。
比較的分かりやすいエラーとしては「変数がまだ使われていないのに参照しようとしたとき」にはNameError例外が発生しますし、「int型の引数にstr型を渡してしまったとき」にはValueError例外が発生します。その他にもたくさんの「例外」があります。
例外が発生するとプログラムはそこで停止してしまいます。しかし、それを検出してプログラムを継続する方法もあります。
raise文はこの「例外」を意図的に発生させるための文です。「例外」を意図的に発生させることでエラー処理がすっきりと簡単に記述できることもありますので、この機会に覚えましょう。
raise文を使ってみる
既存の例外クラスを使う場合には、例えば下記のプログラムのようにすると既存のNameError例外を発生させ、また検出することができます。
tryのブロックに例外が発生する可能性があるコードを記述します。下記の例ではraise文でNameError例外を強制的に発生させています。NameError例外を検出するとexceptのNameErrorブロックが実行されます。
1
2
3
4
5
6
7
|
# Python3で動作させてください。
# Python3.9.1で動作確認しました。
try: # 例外が発生する可能性があるコードを記述します
raise NameError("ネームエラーです") # raise文で例外を発生させています
except NameError as e: # NameErrorが発生すると、ここに来ます
print(e) # 「ネームエラーです」と表示されます
|
独自の例外クラスを作る
独自の例外クラスはExceptionクラスを継承するかExceptionクラスを祖先に持つクラスを継承して作ることができます。
下記のプログラムでは独自の例外クラスであるOriginalErrorクラスを定義して、func関数のraise文でOriginalError例外を発生させています。OriginalErrorの引数はexceptの所の変数eに渡されるため、結果としてprint文でメッセージが表示されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# Python3で動作させてください。
# Python3.9.1で動作確認しました。
# 独自の例外クラス
# Exceptionクラスを継承しているだけで、何も定義していないクラス
class OriginalError(Exception):
pass # 何もしないことを表す特殊な命令です
# OriginalError例外を発生させる関数
def func():
raise OriginalError("OriginalErrorです。") # OriginalErrorを発生させています
# 例外発生・検出
try: # 例外が発生する可能性があるコードを記述します
func() # この関数内で例外が発生する可能性があります
except OriginalError as e: # OriginalError例外が発生すると、ここに来ます
print(e) # 「OriginalErrorです。」と表示されます
|
例外クラスとその他の処理
上の項では独自の例外クラスを作成しましたので、もう少し実用的な例となる処理を追加することにします。
表示されるメッセージはraise文の所で指定しましたが、仮に同じメッセージを常に表示するのであれば引数で渡すのではなく例外クラスの定義の所に記述することができます。
特殊メソッドの__str__を用いることで例外発生時のメッセージをreturn文で返すことができます。
同時にTestClassクラスを作成し、割り算(div)の所でゼロ除算が発生する前にOriginalError例外を発生させてみることにします。
Pythonにはtracebackというモジュールがありまして、エラー発生時に「どのように関数が呼び出され、どこでエラーが発生したか」を特定できるものです。このtracebackというモジュールも使ってみることにします。
下記のサンプルプログラムはsample.pyとして保存します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# sample.pyです。
# Python3で動作させてください。
# Python3.9.1で動作確認しました。
import traceback # トレースバックモジュールをインポート
# 独自の例外クラス
class OriginalError(Exception):
def __str__(self): # 特殊メソッド(戻り値はstr型でなければなりません)
return "このErrorが表示されます。"
# テスト用のクラス
class TestClass():
def add(self,a,b): # 加算するメソッド
return a+b
def div(self,a,b): # 除算するメソッド
if b==0: # ゼロ除算になるときは
raise OriginalError() # OriginalErrorを発生させます
return a/b
# OriginalError例外を発生させる関数
def func():
o = TestClass()
print( o.add(3,5) ) # 8
print( o.div(6,2) ) # 3.0
print( o.div(3,0) ) # 例外発生
print( o.div(10,5) ) # (上の行で例外が発生するため)実行されません
# 例外発生・検出
try: # 例外が発生する可能性があるコードを記述します
func() # この関数内で例外が発生する可能性があります
except OriginalError as e: # OriginalError例外が発生すると、ここに来ます
print(e) # 「このErrorが表示されます。」と表示されます
traceback.print_exc() # OriginalErrorのスタックトレースを表示
|
Pythonのraise文の使い方
raise文は例外を発生させるための文です。例外クラスは既存の例外クラス以外にも独自の例外クラスを作成することができます。
raise文と独自例外クラスおよびスタックトレースが有効なのは、プログラムをほぼ開発し終わって実際に動かしているときに、時々発生するようなエラーに対応するときでしょう。もちろん開発中のときでも役に立ちますが、きっとデバッガの方が活躍するでしょう。
長期で付き合うようなプログラムを作成するときで、致命的なエラーが発生しそうな所には、エラーを検出するコードを記述してraise文で例外を発生するようにしておくと良いでしょう。そのときスタックトレースの表示もするようにしておきましょう。
- システム
エンジニア - Pythonのraise文の使い方やコードの書き方がわかりました。
- プロジェクト
マネージャー - Pythonのraise文のコード例を参考に実践し、使い方をマスターしましょう。
最後に
以上、raise文とそれに関連する処理について解説しました。「例外」を上手に使うと処理をすっきりと書けることがありますので使えるようになりましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Python新着案件New Job
-
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都豊島区(池袋駅) -
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都豊島区(池袋駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅)