一般的な例外を認識する
このステップでは、一般的な例外について探ります。例外は、構文エラーとは異なり、プログラムの実行中に発生します。コードは構文的には正しいものの、実行中にエラーが発生します。
ファイル common_exceptions.py が ~/project ディレクトリ内に用意されています。
まず、ZeroDivisionError(ゼロ除算エラー)を発生させてみましょう。エディタで common_exceptions.py を開き、以下のコードを追加します。
numerator = 10
denominator = 0
result = numerator / denominator
print(result)
ファイルを保存し、ターミナルから実行します。
python common_exceptions.py
プログラムは実行を開始しますが、停止し、ZeroDivisionError を表示します。数学的にゼロによる除算は未定義であり、Python はこの例外を発生させて問題を指摘します。
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 3, in <module>
result = numerator / denominator
ZeroDivisionError: division by zero
次に、NameError(名前エラー)を発生させてみましょう。これは、まだ定義されていない変数を使おうとしたときに発生します。common_exceptions.py の内容を以下に置き換えてください。
print(undefined_variable)
ファイルを保存して実行します。
python common_exceptions.py
インタープリタが undefined_variable が何を指しているのかわからないため、NameError が発生します。
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 1, in <module>
print(undefined_variable)
NameError: name 'undefined_variable' is not defined
次に、TypeError(型エラー)を見てみましょう。これは、不適切な型のオブジェクトに対して操作を実行しようとしたときに発生します。common_exceptions.py の内容をこのコードに置き換えてください。
print("Hello" + 5)
スクリプトを保存して実行します。
python common_exceptions.py
TypeError が表示されます。Python では、文字列と整数を直接加算(+)することは許可されていません。
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 1, in <module>
print("Hello" + 5)
TypeError: can only concatenate str (not "int") to str
最後に、IndexError(インデックスエラー)を実演します。これは、シーケンス(リストなど)の要素に、範囲外のインデックスを使ってアクセスしようとしたときに発生します。common_exceptions.py の内容を以下に置き換えてください。
my_list = [1, 2, 3]
print(my_list[5])
スクリプトを保存して実行します。
python common_exceptions.py
IndexError が発生します。リスト my_list には 3 つの要素しかないので、有効なインデックスは 0、1、2 です。インデックス 5 へのアクセスは不可能です。
Traceback (most recent call last):
File "/home/labex/project/common_exceptions.py", line 2, in <module>
print(my_list[5])
IndexError: list index out of range
これらの一般的な例外を理解することは、Python コードのデバッグを学ぶ上で重要な部分です。