例外を発生させる
raise文
Python に登録されているエラーは自動的に例外が発生しますが、自作した関数の中で例外を発生させたいときは、raise文を使います。
code: raise の記述方法
raise 例外クラス('メッセージ')
次の例では、関数 my_divide() の中で余算の分母がゼロのときに発生する例外ZeroDivisonErrorを捕獲して、新たに ValueError として例外を発行しているものです。
code: 0404_raise_example.py
def my_divide(a, b):
try:
print(a / b)
except ZeroDivisionError:
raise(ValueError('Zero Division'))
for n in data:
try:
my_divide(1,n)
except ZeroDivisionError:
print('ZeroDivisonError Occurs')
except ValueError:
print('ValueError Occurs')
これを実行すると次のような結果になります。
code: bash
$ python 0404_raise_example.py
1.0
ValueError Occurs
0.5
0.3333333333333333
本来であれば発生するはずの例外 ZeroDivisionError は関数 my_divided() の中で捕獲されてしまいます。
例外を定義する
独自に例外を定義するためには、クラス定義の知識が必要になりますが、
ここでは例外の定義方法を形式的に覚えておくだけで構いません。
code: python
class MyProgError(BaseException):
pass
この例で作成した例外 MyProgErrorを発生させるためには次のように呼び出します。
code: python
raise MyProgError("Something wrong")
これを捕獲するためには except文ですね。
code: 0405_raise_custome_error.py
class MyProgError(BaseException):
pass
def dummyfunc():
raise MyProgError("Error in dummyfunc()")
try:
dummyfunc()
except MyProgError as msg:
print(msg)
問:例外を発生させる方が都合が良いことには、どんなものがあるでしょうか?
ヒント: funcA( funcB( funcC() ) )