特定の例外を捕捉する
前のステップでは、Python のさまざまな例外タイプについて学びました。今回は、try...except
ブロックを使って特定の例外を捕捉する方法を学びます。これにより、異なるエラーを異なる方法で処理でき、コードをより堅牢にすることができます。
例外を捕捉する際には、できるだけ具体的にすることがベストプラクティスです。これにより、except
ブロックが意図しない例外を誤って捕捉し、エラーを隠蔽してデバッグを困難にすることを防ぎます。
exceptions_demo.py
スクリプトを変更して、文字列から整数への変換時に ValueError
などの特定の例外を捕捉してみましょう。
- VS Code を使って
~/project
ディレクトリ内の exceptions_demo.py
ファイルを開きます。
- スクリプトを変更して、文字列から整数への変換時に
ValueError
のみを捕捉するようにします。
try:
num = int("abc")
except ValueError as e:
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
この例では、int("abc")
が失敗したときに発生する ValueError
を具体的に捕捉しています。try
ブロック内で他の例外が発生した場合、それは except Exception as e:
ブロックで捕捉されます。print("Continuing execution...")
文は、例外が捕捉された場合に必ず実行され、例外を処理した後もプログラムが続行されることを示しています。
では、このスクリプトを実行しましょう。
- VS Code でターミナルを開きます。
~/project
ディレクトリに移動します。
cd ~/project
python
コマンドを使って exceptions_demo.py
スクリプトを実行します。
python exceptions_demo.py
以下の出力が表示されるはずです。
ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...
この出力は、ValueError
が捕捉され、プログラムが続行されたことを示しています。
次に、スクリプトを変更して TypeError
などの別の例外を発生させ、それがどのように処理されるかを見てみましょう。
- VS Code を使って
~/project
ディレクトリ内の exceptions_demo.py
ファイルを開きます。
- スクリプトを変更して
TypeError
を発生させます。
try:
result = 1 + "a"
except ValueError as e:
print(f"ValueError caught: {e}")
except Exception as e:
print(f"Some other exception: {e}")
print("Continuing execution...")
再度スクリプトを実行します。
python exceptions_demo.py
以下の出力が表示されるはずです。
Some other exception: unsupported operand type(s) for +: 'int' and 'str'
Continuing execution...
この出力は、特定の except TypeError
ブロックがないため、TypeError
が except Exception as e:
ブロックで捕捉されたことを示しています。
特定の例外を捕捉することで、異なるエラーを異なる方法で処理でき、コードをより堅牢にし、デバッグを容易にすることができます。次のステップでは、例外インスタンスを検証する方法を学びます。