Pythonのコードでエラーが発生しても、そこでプログラムを終わらせずに処理を続ける方法や、エラーの種類ごとに処理を分ける方法などを実現できる「例外処理」について解説します。
例外処理の基本
エラーの発生を捉えるにはif文ではなく、try-except文を使います。例えば、0で何かを割ることはできませんから、エラーが発生します。以下のようなコードではエラーになってプログラムが途中で終了してしまいます。
a = 1 / 0
print(a)
print("処理完了") # ZeroDivisionError: division by zero
この例では1行目でエラーが発生し、次の行以降は実行されません。1行目で0で割ろうとすると、ZeroDivisionErrorという例外が発生しています。このエラーを「キャッチ」して、処理を最後まで継続するためには例外処理を実装します。
a = None
try:
a = 1 / 0
except ZeroDivisionError:
print("ゼロ除算エラーが発生")
print("処理が完了")
print(a) # None
このように、処理をtry-except文で囲ってあげます。exceptの後には例外名を書きます。
try:
# 通常の処理
except:
# 例外発生時の処理
こうすると、tryブロックの途中でZeroDivisionError例外が発生してもexcept文がキャッチし、exceptブロックのコードが実行されます。
すべての例外をキャッチする
上の例では0除算のエラー(ZeroDivisionError)の例外が発生したときはうまくキャッチできますが、他の例外には対応できません。すべての例外をキャッチしたいときは、以下のようにExceptionクラスを指定します。
try:
target = a[10]
except Exception as e:
print(f"エラーメッセージ:{e}")
Exceptionクラスは(ほとんど)すべての例外の既定クラスです。そのため、どのような例外でもキャッチすることができます。どんな例外が発生しても必ずexceptブロックを実行させたいときや、想定できない例外が発生する可能性が高いときに使います。
ただしExceptionクラスのように、どのような例外もキャッチしてしまうと、プログラムの隠れたバグの原因になることも。後々にデバッグを難しくする原因にもなります。できるだけ具体的な例外クラスを指定するようにし、Exceptionを乱用するのは控えましょう。
- 以上が、Pythonでエラーハンドリングを行う際の基本的な考え方となります。この知識を活かして、より堅牢なPythonコードを書くことができるようになりましょう。
-
[初心者向け] Python if文でエラーを補足する?そこは「例外処理」にしましょう!