try-except ブロックを実装する
前のステップでは、例外がプログラムを突然終了させる可能性があることを見ました。例外を適切に処理し、プログラムのクラッシュを防ぐために、try
と except
ブロックを使用することができます。
try
ブロックを使用すると、例外を発生させる可能性のあるコードのセクションを囲むことができます。try
ブロック内で例外が発生した場合、プログラムは対応する except
ブロックにジャンプし、そこで例外を処理することができます。
exceptions_example.py
ファイルを変更して、ZeroDivisionError
を処理する try-except
ブロックを追加しましょう。VS Code エディタで exceptions_example.py
ファイルを開き、以下のように変更します。
## ~/project/exceptions_example.py
def divide(x, y):
try:
result = x / y
return result
except ZeroDivisionError:
return "Cannot divide by zero!"
print(divide(10, 2))
print(divide(5, 0))
print(divide(8, 4))
この変更後のコードでは、以下のことを行っています。
x / y
の演算を try
ブロックで囲んでいます。これは、除算中に ZeroDivisionError
が発生した場合、プログラムが except
ブロックにジャンプすることを意味します。
except ZeroDivisionError:
の行は、ZeroDivisionError
例外を処理したいことを指定しています。
except
ブロック内では、文字列 "Cannot divide by zero!"
を返しています。これにより、プログラムがクラッシュする代わりに、このメッセージがコンソールに出力されます。
では、変更後のスクリプトを実行しましょう。VS Code のターミナルを開き、以下のコマンドを実行します。
python ~/project/exceptions_example.py
以下のような出力が表示されます。
5.0
Cannot divide by zero!
2.0
ご覧の通り、ゼロで除算するときにプログラムはもはやクラッシュしません。代わりに、except
ブロックが ZeroDivisionError
を捕捉し、メッセージ "Cannot divide by zero!"
が出力されます。その後、プログラムは引き続き実行され、最後の print
文も正常に実行されます。
try-except
ブロックは、他のタイプの例外を処理するためにも使用できます。たとえば、互換性のないデータ型に対して演算を行おうとした場合に発生する TypeError
例外を処理するために try-except
ブロックを使用することができます。また、複数の except
ブロックを使用して、異なるタイプの例外を処理することもできます。
次のステップでは、pytest
を使用して例外をテストする方法について学びます。