Pythonでプログラムを書いていると、「エラー」や「例外」によって処理が途中で止まってしまうことがあります。
この記事では、初心者がよく遭遇する 「エラー」と「例外」 をシンプルな説明とコード例で紹介します。
さらに、例外が発生したときにプログラムを止めずに処理を続ける方法(try-except
文)もあわせて解説します。
このページで紹介するエラー一覧
エラー(実行前に発生)
-
SyntaxError
:構文エラー -
IndentationError
:インデントエラー -
NameError
:名前(変数など)未定義エラー
例外(実行中に発生)
-
TypeError
:型エラー -
ValueError
:値エラー -
IndexError
:インデックス範囲外エラー -
KeyError
:辞書のキーエラー -
AttributeError
:属性・メソッドエラー -
ZeroDivisionError
:ゼロ除算エラー -
ImportError
:モジュール読み込みエラー -
ModuleNotFoundError
:モジュール未発見エラー -
KeyboardInterrupt
:ユーザーによる中断エラー -
IOError
:入出力エラー(ファイル操作など)
エラーと例外の違い(ざっくり)
- エラー:構文のミスなど、プログラムの実行前に発生する問題
-
例外:実行中に発生するエラー。
try-except
で処理できる
エラー:実行前に発生する問題(構文ミスなど)
1. SyntaxError(構文エラー)
Pythonの文法に間違いがあるときに出ます。
if True
print("Hello") # コロンが抜けている
2. IndentationError(インデントエラー)
インデント(字下げ)が不正なときに出ます。
def greet():
print("こんにちは") # インデントが必要
3. NameError(名前エラー)
定義していない変数や関数を使おうとしたときに出ます。
print(message) # message が未定義
例外:実行中に発生するエラー(try-except
で処理可能)
1. TypeError(型エラー)
型の違いによって演算や操作ができないときに出ます。
result = '100' + 100 # 文字列と数値の加算は不可
2. ValueError(値エラー)
値の型は正しいが、中身の値が不正なときに出ます。
num = int("abc") # "abc"はintに変換できない
3. IndexError(インデックスエラー)
リストなどの要素番号が範囲外のときに出ます。
items = [1, 2, 3]
print(items[5]) # 存在しない位置
4. KeyError(キーエラー)
辞書に存在しないキーを指定したときに出ます。
d = {"apple": 1}
print(d["banana"]) # "banana" は存在しないキー
5. AttributeError(属性エラー)
オブジェクトに存在しない属性やメソッドを使ったときに出ます。
x = 100
x.append(1) # int型にappendはない
6. ZeroDivisionError(ゼロ除算エラー)
0で割ろうとしたときに出ます。
print(10 / 0)
7. ImportError(モジュール読み込みエラー)
モジュール自体は存在するが、その中の属性や関数が見つからないときに出ます。
from math import not_a_function # math モジュールには存在しない関数
8. ModuleNotFoundError(モジュール未発見エラー)
import
文で存在しないモジュールを読み込もうとしたときに出ます。
Python 3.6以降で導入されたエラーです。
import not_a_module # 存在しないモジュール
ModuleNotFoundError
はImportError
のサブクラスです。
except ImportError:
で両方をまとめて処理できます。
9. KeyboardInterrupt(キーボード割り込み)
実行中に Ctrl + C などでユーザーが中断したときに出ます。
try:
while True:
pass # 無限ループ中に Ctrl+C を押すと発生
except KeyboardInterrupt:
print("手動で中断されました")
10. IOError(入出力エラー) ※現在は OSError に統合
ファイルの読み込み・書き込みなどの入出力で問題が起きたときに出ます。
以下のようなファイルが見つからないエラーは IOError
や FileNotFoundError
として扱われます。
try:
f = open("not_exist.txt")
except IOError:
print("ファイルが見つかりません")
💡 Python 3.3以降では、
IOError
はOSError
に統合され、
FileNotFoundError
のような具体的な例外に分かれています。
例外処理の基本形
ここまで紹介してきた「例外」は、プログラムの実行中に発生します。
例外が発生すると、プログラムはエラーを出して強制終了してしまいますが、
try
と except
を使うことで「エラーが起きても処理を止めずに続ける」ことができます。
基本的な書き方は以下のようになります:
try:
value = int("abc")
except ValueError:
print("整数に変換できませんでした")
このように、例外が起きそうな処理は try
ブロックに入れておき、
発生した例外に対して適切な except
処理を書くことで、安全にプログラムを継続できます。
まとめ
- エラーはプログラムの構文ミスなどで、実行前に検出される
-
例外は 実行中に発生し、
try-except
で処理できる - よく出る種類を知っておくことで、トラブル対応やデバッグが圧倒的に楽になる!