Python資格取得への道のり 11日目
・独自例外の作成
例外は自分でも発生させることができる。それを行うには、
raise文を使用する。
raise IndexError('test error')
#IndexError: test error
たとえば、エラー項目について継承することもできる。
class UppercaseError(Exception):
pass
上記のコードでExceptionを独自に作成したUppercaseErrorに継承することができる。では、実際にはどういう動きをするのか、確認してみます。
class UppercaseError(Exception):
pass
def check():
words = ['apple', 'orange', 'banana']
for word in words:
if word.isupper():
raise UppercaseError(word)
check()
#(実行しても何も返さない)
上記のコードは何も返さない。wordsのなかはすべて小文字のためエラーにはならない。では、一部を大文字に変更するとどうなるのか。
class UppercaseError(Exception):
pass
def check():
words = ['APPLE', 'orange', 'banana']
for word in words:
if word.isupper():
raise UppercaseError(word)
check()
#raise UppercaseError(word) __main__.UppercaseError: APPLE
上記のようにエラーが返されます。さらにPythonでデフォルトで設定されているものではなく、先ほど独自で作成したエラーを返しています。
またこれを応用すると下記のようなコードになります。
class UppercaseError(Exception):
pass
def check():
words = ['apple', 'orange', 'banana']
for word in words:
if word.isupper():
raise UppercaseError(word)
try:
check()
except UppercaseError as exc:
print('This is my fault. Go next')
#This is my fault. Go next
上記のように、独自で設定したルールに引っかかた場合のPrint文を実行させる操作も可能です。
今回は「UppercaseError」を事前に定義し、それを利用した例であった。
これがもし、「NameError」(Pythonのデフォルトのエラー)などを使用すると他者から「なぜ?このときにPythonのデフォルトエラーであるNameErrorが返されるのか?」疑問に思われてしまう。
そのため最初の2行に書かれている通り、独自のエラーであることを定義してから使用することで、「UppercaseError」が独自エラーと判断されるため必要なことである。
今日はここまででした。
プライベートであまり時間が取れない日々が続いていて、思うような進捗がでていません。。。。
しかし、継続して資格取得をスタートとして様々な処理を身につけていくため継続していきます。
明日からはついにセクション6:モジュールとパッケージです。
この記事が気に入ったらサポートをしてみませんか?