例外処理の流れを学ぶ
このステップでは、Python の例外処理について学びます。例外処理は、堅牢で信頼性の高いコードを書く上で重要な部分です。これにより、プログラムの実行中に発生する可能性のあるエラーを適切に処理し、プログラムのクラッシュを防ぎ、よりユーザーフレンドリーな体験を提供することができます。
簡単な例から始めましょう。2 つの数を除算したいが、2 番目の数が 0 になる可能性があるとします。0 で除算することは未定義の操作であり、Python では ZeroDivisionError
が発生します。
-
LabEx 環境で VS Code エディタを開きます。
-
~/project
ディレクトリに division.py
という名前の新しいファイルを作成します。
touch ~/project/division.py
-
division.py
ファイルを編集し、以下のコードを追加します。
## division.py
numerator = 10
denominator = 0
result = numerator / denominator
print(result)
-
python
コマンドを使用してスクリプトを実行します。
python ~/project/division.py
次のようなエラーメッセージが表示されます。
Traceback (most recent call last):
File "/home/labex/project/division.py", line 4, in <module>
result = numerator / denominator
ZeroDivisionError: division by zero
このエラーメッセージは、0 で除算しようとしたために ZeroDivisionError
が発生したことを示しています。例外処理がない場合、プログラムは突然終了します。
では、例外処理を使用してこのエラーを適切に処理しましょう。
-
division.py
ファイルを変更して、try...except
ブロックを追加します。
## division.py
numerator = 10
denominator = 0
try:
result = numerator / denominator
print(result)
except ZeroDivisionError:
print("Error: Cannot divide by zero.")
このコードでは、try
ブロックに例外が発生する可能性のあるコードが含まれています。try
ブロック内で ZeroDivisionError
が発生した場合、except
ブロック内のコードが実行されます。
-
スクリプトを再度実行します。
python ~/project/division.py
これで、プログラムはクラッシュする代わりに、次のように出力されます。
Error: Cannot divide by zero.
これは、例外処理の基本構造を示しています。
try
ブロックは、例外が発生する可能性のあるコードを囲みます。
except
ブロックは、捕捉する例外のタイプと、その例外が発生した場合に実行するコードを指定します。
複数の except
ブロックを使用して、複数のタイプの例外を捕捉することもできます。
## division.py
numerator = 10
denominator = "abc"
try:
result = numerator / int(denominator)
print(result)
except ZeroDivisionError:
print("Error: Cannot divide by zero.")
except ValueError:
print("Error: Invalid input. Please enter a number.")
この例では、ValueError
例外ハンドラを追加しています。denominator
を整数に変換できない場合(たとえば、"abc" のような文字列の場合)、ValueError
が発生し、対応する except
ブロックが実行されます。
スクリプトを実行します。
python ~/project/division.py
出力:
Error: Invalid input. Please enter a number.
例外処理により、潜在的なエラーを予測して処理することで、より堅牢でユーザーフレンドリーなプログラムを作成することができます。