Python 例外処理のサンプル(try…exceptとraise)

目次

確認環境:Python 3

try...except文とは

try:
  例外が発生する可能性がある処理

except 例外クラス名 [as 変数名]:
  例外発生時の処理

else:
  例外が発生しなかったときの処理
  • tryの処理で例外が発生した場合、exceptの例外処理が実行されます。
  • 例外クラス名は、キャッチする例外を記述します。
  • exceptの最後にあるas 変数名は省略可能です。
  • elseは例外が発生しなかったときに実行されます。
  • 以下はPythonの公式ドキュメントの「8.3. 例外を処理する」のリンクです。
    https://docs.python.org/ja/3/tutorial/errors.html#handling-exceptions

try...except文のサンプル

# coding: utf-8

try:
	a = 100/0
except Exception:
	print("Error") # End
else:
	print("End")

4行目は数値を0で割るのでエラーになります。
5行目は、エラーをキャッチし6行目の文言を表示ます。
8行目の文言は表示されません。

 

try...except...finally文とは

try:
  例外が発生する可能性がある処理

except 例外クラス名 [as 変数名]:
  例外発生時の処理

finally:
  例外ありなしに関わらず実行する処理
  • finallyは、エラーがなくてもあっても必ず実行されます。

try...except...finally文のサンプル

# coding: utf-8

try:
	a = 100/0
except Exception:
	print("Error") # Error
finally:
	print("End") # End

7行目は、finallyでエラーが発生しても8行目は実行されます。

 

raise文とは

raise 例外クラス名(引数の値)

 

raise文のサンプル

# coding: utf-8

try:
	a = 100/10
	raise Exception('例外のテスト')

except Exception as e:
	print(e) # 例外のテスト

5行目は、raise文で強制的に例外を発生させています。
7行目のexceptでキャッチし、8行目は5行目の引数の値を表示します。

raise文の引数が2つあるサンプルです。

try:
	a = 100/10
	raise Exception('例外のテスト','err1')

except Exception as e:
	print(e) # ('例外のテスト','err1')

3行目は、引数が2つあります。引数は任意の数を指定できます。
6行目は、タプルで3行目の引数の値が表示されます。

 

独自の例外を作成する

作成するアプリに合わせた独自の例外を作成することで、例外ハンドリングを容易にし保守性と可読性を上げることができます。

独自の例外を作成するには、Exceptionクラスを継承します。

# coding: utf-8

class TestException(Exception):
    pass

def calc1(a):
    if a == 0:
        raise TestException('独自例外')
    return

a = 0

try:
    calc1(a)
except TestException as e:
    print(e) # 独自例外
finally:
    pass

3行目で、Exceptionクラスを継承して独自の例外を作成しています。
8行目は、独自のエラーをraiseしています。
15行目でcatchされ「独自例外」と表示されます。

関連の記事

Python タプルの仕組みと使い方のサンプル(tuple)
Python 関数のサンプル(def)
Python ローカル変数とグローバル変数

△上に戻る