【SikuliX】【Python】try文を使用した例外処理をしてみよう~中編~

プログラム実行中に考慮しなくてはいけないことの1つに、エラーや例外の処理があります。

大抵のプログラム言語には、これを行うための専用の構文が存在しています。例えば、Javaの言語でいう「try-catch文」です。

今回は、そんな例外処理を行うためのpython基本形でもあるtry-exceptの派生形について、まとめます。

スポンサーリンク

例外処理

Pythonの例外処理の基本形である「try」「except」 を使用した構文を理解している方向けです。

こちらについて分からない場合は、まず前編をご覧ください。

例外が発生しなかった時に実行される処理

基本形にelse文を追加した構文です。

else文は、try文の中で例外が発生しなかった時に実行される処理になります。

処理のフローを以下に記載します。

実際のソースコードで一例を示します。

コードサンプル:

try:

print(“Try Process is in progress.”)

except:

print(“Exception is occurred.”)

else:

print(“Try Process was successful.”)

実行結果:

Try Process is in progress.
Try Process was successful.

例外発生有無に限らず必ず実行される処理

基本形にfinally文を追加した構文です。

finally文は、例外の発生する/しないに関わらず、tryによる例外処理を記載したら必ず実行される処理です。

処理のフローを以下に記載します。

実際のソースコードで一例を示します。

コードサンプル:

def TEF_sample(a, b):

try:

print(a / b)

except:

print(“Exception is occured.”)

finally:

print(“Process is finished.”)

TEF_sample(1, 2) #例外が発生しない場合
print(” “)
TEF_sample(1, 0) #例外が発生する場合

実行結果:

0.5
Process is finished.

Exception is occured.
Process is finished.

スポンサーリンク

また、初めに「finally文は、tryによる例外処理を記載したら必ず実行される処理」と記載しました。

これはexcept文内に、return文/break文を記載した時でも必ず実行されるということです。

以下で例示します。

コードサンプル(return文):

def sample():

try:

no_code()

except:

print(“error is occured.”)
return (f”except for body: {e2}”)

finally:

print(“finally is finished.”)

a = sample()
print(a)

実行結果(return文):

error is occured.
finally is finished.
except for body: name ‘no_code’ is not defined

コードサンプル(break文):

while True:

try:

no_code()

except:

print(“error is occured.”)
break

finally:

print(“finally is finished.”)

実行結果(break文):

error is occured.
finally is finished.

このように、finally文は必ず通り、最後にexcept文内のreturn文が実行されます。

順番としては、try文(例外が発生) ⇒ except文 ⇒ finally文 ⇒ except文(return文)となります。

もちろん、上記ソースコードでfinally文にreturnがあった場合は、except文内のreturn文は実行されずにfinally文内で値が返されます。

しかし、finally文内でreturn文/break文で返す場合は、例外の情報は破棄されるようなので、注意が必要です。

こういった現象を避けるには、

try / except / finaly の中に記載するのではなく、finally文の後に記載すると良いでしょう。以下では、break文に対して例示しますが、return文の場合も同様です。

コードサンプル(break文の場合):

while True:

try:

no_code()

except:

print(“error is occured.”)

finally:

print(“finally is finished.”)
break

全部乗せ

先述の else /finally は同時に使うことも、もちろん可能です。それぞれの動きや役割は同じです。

処理のフローを以下に記載します。

実際のソースコードで一例を示します。

コードサンプル:

def TEF_sample(a, b):

try:

print(a / b)

except:

print(“Exception is occured.”)

else:

print(“Try Process was successful.”)

finally:

print(“Process is finished.”)

TEF_sample(1, 2) #例外が発生しない場合
print(” “)
TEF_sample(1, 0) #例外が発生する場合

実行結果:

0.5
Try Process was successful.
Process is finished.

Exception is occured.
Process is finished.

まとめ

今回は、pythonにおける例外処理の中編として基本形でもあるtry-exceptの派生形について記載しました。

後編では、pythonの例外処理における補足情報をまとめます。

こちらも、参考にしてみて下さい。

スポンサーリンク