見出し画像

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:モジュールとパッケージです。

この記事が気に入ったらサポートをしてみませんか?