
【第14回】Pythonのエラーとデバッグの基本
こんにちは。
プログラミングをしていると、エラーは必ず発生します。この記事では、Pythonの基本的なエラーの種類と、エラーが出たときの対処法をやさしく解説します。
1、エラーとは?
エラーとは、プログラムの実行中に問題が発生し、処理が止まることです。Pythonでは、エラーの種類ごとにメッセージが表示されるので、それを読み解くことで問題を解決できます。
Pythonのエラーには大きく分けて以下の3種類があります。
構文エラー(SyntaxError)
実行エラー(例外 / Exception)
論理エラー(バグ)
2、構文エラー(SyntaxError)
構文エラー(SyntaxError)は、Pythonの文法に誤りがあるときに発生します。
例:カッコの閉じ忘れ
print("こんにちは"
→ SyntaxError: unexpected EOF while parsing(カッコが閉じられていない)
例:コロンの付け忘れ
if True
print("OK")
→ SyntaxError: expected ':'(コロン : を忘れている)
対処法
エラーメッセージをよく読む
コードの書き方をもう一度見直す
似た記号(全角・半角の違いなど)を確認する
3、実行エラー(例外 / Exception)
構文は正しくても、実行時に問題が発生すると「例外(Exception)」というエラーが出ます。
例:ゼロで割る(ZeroDivisionError)
print(10 / 0)
→ ZeroDivisionError: division by zero(ゼロで割れない)
例:存在しない変数を使う(NameError)
print(name)
→ NameError: name 'name' is not defined(変数 name が定義されていない)
例:型の間違い(TypeError)
print("年齢は" + 20 + "歳です")
→ TypeError: can only concatenate str (not "int") to str
(文字列と整数をそのまま足せない)
対処法
エラーメッセージの英単語を確認する(Zero = 0, Division = 割る, Name = 名前)
変数がちゃんと定義されているか確認する
型が正しいか type() でチェックする
4、論理エラー(バグ)
論理エラーはエラーが出ないのに、プログラムが思った通りに動かない場合です。
例:計算ミス
x = 10
y = 5
print("合計:", x - y) # 本当は足し算が正しい
例:リストの範囲外アクセス
numbers = [1, 2, 3]
print(numbers[3]) # インデックスは0から2までしかない
→ IndexError: list index out of range
対処法
print() を使って変数の値を確認する
range() の範囲をしっかりチェックする
期待する動作と、実際の動作を比べる
5、デバッグの基本
エラーを見つけて直す作業を「デバッグ」と言います。Pythonのデバッグにはいくつかの方法があります。
・print() を使う
プログラムの途中で print() を使って変数の値を確認します。
x = 10
y = 0
print("x:", x)
print("y:", y) # ここでyの値を確認
print(x / y) # ここでエラー発生
・エラーメッセージには
どのファイルの何行目でエラーが出たか
どんな種類のエラーか
が書かれています。これをヒントに、どこを直せばいいのか考えましょう。
・try-except を使う(例外処理)
エラーが発生してもプログラムが止まらないようにできます。
try:
print(10 / 0)
except ZeroDivisionError:
print("ゼロで割ることはできません")
まとめ
SyntaxError は文法ミス(カッコの閉じ忘れ、コロン忘れ)
例外(Exception) は実行時のミス(ゼロ除算、未定義の変数)
論理エラー はプログラムが正しく動かない(計算ミス、範囲外アクセス)
print() を活用してデバッグしよう!
エラーメッセージを読む習慣をつける!
エラーはプログラミングに慣れるほど、すぐに対処できるようになります。最初はびっくりするかもしれませんが、落ち着いてエラーメッセージを読み、修正していきましょう!