はじめに
PRIME STUDY (プライム・スタディ) python3エンジニア認定試験
模擬試験 第一回 問31の「エラーと例外ーユーザー定義例外」
で勉強になったことをメモ。
目次
構文エラーと例外
構文エラー:構文の解釈上のエラーで、エラーは検知されたときに出る^マーク前にあることを示している。
例外:構文エラーではないが、エラーとして検知されたもの。必ずしも致命的ではない。
31問目
コード
class OurException(Exception): #(1)独自の例外
pass
def raise_her_exception(a): #(2)
print(a, "is a")
raise OurException #raise:指定した例外(ここでは(1))を発生させる※1
print("easygoing person.")
def func(key: int): #(3)key(int型)を引数とする関数
try:
if key == 0:
raise_her_exception("Saya") #(2)へ→※1のエラーがでる→exceptへ(例外処理)
except OurException as e:
print("intelligent")
raise Exception #raise:指定した例外(ここではException)を発生させる※2
key = 0
try:
func(key) #(3)へ→※2のエラーがでる→exceptへ(例外処理)
except Exception as f:
print("speedster.")
Saya is a
intelligent
speedster
解説
(1)独自の例外
まず、OurExceptionで独自の例外を書きます
(3)key(int型)を引数とする関数
key :intで、型をintに指定(引数が実際にintじゃなくても動く)
処理は以下のようになされる。
- クラスと関数の定義(1),(2),(3)
- keyの定義
- func(key)→(3)へ
ここからは上のコードの数を追っていけば流れがわかる。
Key
コードの(2)のraise OurException
をコメントアウトすると、以下のように出力される
Saya is a
easygoing person.
ここではraiseがコメントアウトされたため、(3)で記載している「※1のエラーがでる→exceptへ(例外処理)」の流れがなかった。
したがってその次のexcept OurException as e:
に行かず、
結果的にexcept Exception as f:print("speedster.")
も処理されなかったわけである。