はじめに
Pythonの例外処理について本で読んだ内容をまとめました。
try文のいろいろな書き方
try節の中で例外が発生した場合、try節から抜けてexcept節に移る。
発生した例外に一致するexcept節の文を実行後にtry文の外側に移る。
try:
(例外が発生する可能性のある処理)
except 対象の例外:
(指定した例外が発生した場合に実行する処理)
try文ではexcept節に複数の例外を指定可能。
try:
(例外が発生する可能性のある処理)
except 対象の例外A:
(例外Aが発生した場合に実行する処理)
except 対象の例外B:
(例外Bが発生した場合に実行する処理)
try:
(例外が発生する可能性のある処理)
except (例外1, 例外2, ...):
(対象の例外のいずれかが発生した場合に実行する処理)
except節に例外を指定しない場合、全ての例外がそのexcept節で処理される。
try:
(例外が発生する可能性のある処理)
except:
(例外が発生した場合に実行する処理)
Except節は例外で指定した例外を処理するだけでなく、指定した例外を基底クラスとする例外も処理する。
例えば、Exceptionという例外クラスはほぼ全ての例外の基底クラスのため、
except節でExceptionを指定することで、その節でほぼ全ての例外を処理することができる。
try:
(例外が発生する可能性のある処理)
except Exception:
(Exceptionが発生した場合に実行する処理)
例外発生時は例外クラスのオブジェクトが生成されており、except節でこのオブジェクトを受け取ることが可能。
try:
(例外が発生する可能性のある処理)
except 例外 as 変数:
(指定した例外が発生した場合に実行する処理)
(指定した変数に例外オブジェクトが代入されている)
except節の中にpass文を書くと、例外が発生したときに何も行わない。
⇨例外の隠蔽になるので注意が必要
try:
(例外が発生する可能性のある処理)
except 例外:
pass
finally節に書いた処理は、例外が発生してもしなくても実行される。
try:
(例外が発生する可能性のある処理)
except 例外:
(指定した例外が発生した場合に実行する処理)
finally:
(例外が発生してもしなくても実行する処理)
else節に書いた処理は、例外が発生しなかった場合に実行される。
try:
(例外が発生する可能性のある処理)
except 例外:
(指定した例外が発生した場合に実行する処理)
else:
(例外が発生しなかった場合に実行する処理)
finally:
(例外が発生してもしなくても実行する処理)
raise文
raise文を使用すると、例外を発生させることができる。
raise 例外
except節の中でraise文を使用すると次のことができる。
- 例外を他のexcept節に再送出する
- 処理中の例外を原因として他の例外を発生させる
つまりexcept節でraise文を使用することで、あるexcept節内で例外の処理を完結させず、他のexcept節に残りの処理を委ねることができる。
try:
(例外が発生する可能性のある処理)
except 例外:
raise
except:
(再送出された例外の処理)
try:
(例外が発生する可能性のある処理)
except 例外A:
raise 例外B from 例外A
except 例外B:
(例外Aのexcept節で発生した例外Bの処理)
参考書籍
『Python[完全]入門』 松浦健一郎 司ゆき 著 (2021年3月29日発行)