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

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

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

今回は、そんな例外処理をpythonで行う方法の基本形について、まとめます。

スポンサーリンク

例外処理

Python での例外処理は、他の言語と同様に「try」を使用します。異なる点としては、例外処理を行う際の記載する際に使用する構文が異なってきます。

基本形

try文を扱う際は、except文とセットで用います。

それぞれ、どんな処理を記載するかは以下のようになっています。

処理の内容
try例外を検出を確認する処理です。
excepttry文内で例外が発生した場合に行う処理です。

例外が発生しなければ、処理が実行されずにスキップされます。

処理のフローを記載すると、以下のようになります。

なお、サンプル内での「no_code()」は、未定義の関数だと思ってください。そのため、「NameError」の例外(Exceotion)が得られます。

 「NameError」は、ローカルまたはグローバルの名前が見つからなかった場合に送出される例外です。

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

コードサンプル:

try:

no_code()

except:

print(“Exception occurred.”)

実行結果:

Exception occurred.

スポンサーリンク

例外の種類毎に処理を分けたい場合

特定の例外に対して、個別に処理を分けることも可能です。その場合は、except の後ろに例外の種類を記載します。

処理のフローを記載すると、以下のようになります。

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

コードサンプル:

try:

no_code()

except NameError:

print(“Name Error occurred.”)

実行結果:

Name Error occurred.

また、except は、複数連ねることができます。そのため、2個以上の特定の例外に対する処理を分けることが可能になります。

以下のように、タプルを用いることで、1つの except で複数の例外を指定することもできます。

コードサンプル:

try:

doc_open()
doc_edit()
doc_save()

except (FileExistsError, FileNotFoundError):

print(“File Error occurred.”)

※doc_open()、doc_edit()、doc_save()は、文書の「開く」「編集」「保存」を行う関数だと思ってください。

なお、ここで注意しなければならない点があります。それは、指定していない例外が発生した場合です。

処理する例外を指定した場合、指定していない例外が発生した場合は、プログラムの実行が異常終了してしまいます。

この場合は、システム終了を除く全ての組み込み例外の親となるExceptionを用いるのが良いでしょう。

コードサンプル:

try:

no_code()

except NameError:

print(“Name Error occurred.”)

except Exception:

print(“Undefined Eception occurred.”)

もしくは、何も指定していない except: を追加しても良いでしょう。

コードサンプル:

try:

no_code()

except NameError:

print(“Name Error occurred.”)

except:

print(“Undefined Eception occurred.”)

このように、例外を指定した場合は、全ての例外を処理するための処理を施す必要があります。

なお、python の特性でもありますが、ソースコードは上から順に処理されます。

そのため、より保証範囲が大きいExceptionを指定しているexcept文ほど、下に設定するのが良いでしょう。

もし、一番上のexceptにExceptionが指定されている場合、以降にどんなExceptionの子となる例外が指定されていても、処理されることはありません。

例外の情報を出力した場合

例外の情報を直接出力したいような場合は、実体(オブジェクト)として取得して処理します。

具体的には、except文を「except 例外名 as 変数名:」の並びに則って記載します。

コードサンプル:

try:

no_code()

except Exception as e:

print(e)

実施結果:

name ‘no_code’ is not defined

オブジェクトとして取得した例外(上記で言う「e」)には、例外の内容が含まれています。

また、例外名だけを取得したい場合は、「e.__class__.__name__」を用いて、以下のように記載します。

コードサンプル:

try:

no_code()

except Exception as e:

print(e.__class__.__name__)

実施結果:

NameError

もし、例外の全ての情報を取得したい場合は、「traceback.format_exc()」を使用します。

なお、tracebackを使用するには、「import traceback」を記載する必要があります。

コードサンプル:

import traceback

try:

no_code()

except Exception as e:

print(traceback.format_exc())

実施結果:

Traceback (most recent call last):

File “実行したファイルの絶対パス”, line “エラーの発生した行”, in <module>

no_code()

NameError: name ‘no_code’ is not defined

まとめ

今回は、pythonにおける例外処理の前編として基本形でもあるtry-exceptで説明できる内容を記載しました。

中編では、try-exceptから派生した構文をメインにまとめます。

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

スポンサーリンク