この記事では、Pythonで例外(エラー)を発生させるraise文の使い方を解説します。
明示的にエラーを発生させることで以下のようなメリットがあります。
- 任意の型のエラーを投げれる
- 関数内などで発生させることで呼び出し元に例外処理させられる
それでは、raise
文の使い方を確認してどのように使用できるのか見ていきましょう!
例外(エラー)を発生させる
例外を自発的に発生させるには、raise
文を使います。
raise 例外クラス
()
内に文字列を記述することでメッセージを渡すことができます。
raise 例外クラス(メッセージ)
試しに例外を発生させてみます。
raise SyntaxError
実行結果
Traceback (most recent call last):
File "/Users/user/Desktop/Python/main.py", line 2, in
raise SyntaxError
SyntaxError: None
Traceback
が表示され、SyntaxError
が発生しました。
今回は、なんとなくSyntaxError
を指定しましたが、あらかじめ様々な型が用意されているので適切なものを選んで発生させてください。→ 組み込み例外
メッセージを添えることでより例外が発生した原因がわかりやすくなります。
raise ValueError('例外が発生')
実行結果
Traceback (most recent call last):
File "/Users/user/Desktop/Python/main.py", line 1, in
raise ValueError('例外が発生')
ValueError: 例外が発生
このように、raise
文を使うことで簡単に例外を発生させることができました。
呼び出し元に例外を投げる
関数内でraise
文を使って例外を発生させることで例外を呼び出し元に投げることができます。
def func():
raise ValueError('ValueErrorが発生!')
try:
func()
except ValueError as e:
print(e)
実行結果
ValueErrorが発生!
実際に使用する際には、if
文で分岐させたり、try
文を使ったりします。
# if文の例
def func():
if 条件:
raise 例外クラス
# try文の例
def func():
try:
エラーが起きそうな処理
except:
raise
関数内に例外処理を実装してしまうと処理が固定化されてしまい柔軟性に欠ける。なので、raise
文を使って呼び出し元に例外を投げることで柔軟性の高いコードとなる。
ちなみにraise
文は、式などを指定せず、そのまま記述することで現在処理している例外を再度発生させることができる(アクティブ例外)。
ユーザー定義例外
独自の例外を発生させたい場合は、Exception
クラスを直接的、または間接的に継承させたユーザー定義例外を作成することで実装することができます。
# ユーザー定義例外
class MyError(Exception):
pass
try:
raise MyError
except:
print('MyError発生!')
実行結果
MyError発生!
()
を使ってエラーメッセージを指定することもできる。
class MyError(Exception):
pass
try:
raise MyError('Error') # エラーメッセージ
except MyError as e:
print(e)
実行結果
Error
エラーメッセージを固定したい場合は、__str__
メソッドで文字列を返すことで定義できる。
class MyError(Exception):
def __str__(self) -> str:
return 'MyError' # エラーメッセージ
try:
raise MyError('Error')
except MyError as e:
print(e)
実行結果
MyError
まとめ
この記事では、Pythonで例外を明示的に発生させる方法を解説しました。
関数などを自作する際に、明示的に例外を発生させることで使用方法を限定したり、例外処理に繋げたりと、意外と色々な処理を実装することができます。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ