見出し画像

Pythonの基本的なエラーについて


この記事を書こうと思った理由とエラーを理解することの重要性について

長いので興味がなければ飛ばしてください。

学校の友人からエラーが起きたから解決方法が知りたいと聞かれることがあるのですが、
だいたい、見に行くとエラーの内容を見ているのではなく、教科書や、サイト、先生が書いたコードと自分のコードをみて間違い探しをしている、という状態です。エラーには原因とどこが間違っているか分かりやすく書いてあるのに...!おそらく、エラー文をよく見ない理由として、英語で書かれていて、ぱっと見だと何を言っているのか分からないというところだと思います。

ですが、エラーはコードの問題を検出し、通知をしてくれる重要なものです。エラーをみて原因を理解して、修正することでよりプログラミングへの理解が深まりエラーが発生しにくいコードを書くことにつながります。エラーが起きたらまずはエラー文を見る、英語で分からなければコピペして翻訳するという習慣はプログラミングをするうえで必須だと思います。とはいえ、取っ掛かりずらいのはとても分かります。そこで今回の記事では、Pythonにおいてよく起きるエラーの種類とエラー文によく出てくる英単語についてまとめてみました。

Pythonのエラー文の見方

  1. トレースバックを読んで場所を特定する
    Traceback (most recent call last): の下にどこのファイルの、何行目のどこの部分でエラーが発生しているのかが出力されているため、それを読んで場所を特定する。トレースバックが大量に出力されることもあるが、トレースバックは呼び出し順で出力されるため、上から順にどこが原因か、特定していく。 vscodeの場合 File "ファイル名", line ... の上でctr+クリックで該当箇所を開くことができます

  2. エラーの種類を理解する
    エラーの種類については次のセクションで解説します。

  3. エラーの詳細を理解する
    エラーの種類の横にエラーの詳細があるため、それを見る。英語で理解できない場合は翻訳を絶対にする。

よく起こるエラー集

IndentationError

プログラム内のインデント(字下げ)が正しくないときに発生する。

for i in range(10):
print(i)
IndentationError: expected an indented block after 'for' statement on line 1

SyntaxError

プログラムの構文が正しくないときに発生する

例1

print("hello"
    print("hello"
         ^
SyntaxError: '(' was never closed

例2

name = {"name":"kuwaharu"}
print(f"hello{name["name"]}")
print(f"hello{name["name"]}")
                    ^^^^
SyntaxError: f-string: unmatched '['

この例の場合このように修正する必要があります

```python
name = {"name":"kuwaharu"}
print(f"hello{name['name']}")

NameError

定義されていない変数や関数を使用すると発生する

print(f"hello {name}")
    print(f"hello {name}")
                   ^^^^
NameError: name 'name' is not defined

TypeError

データ型の不一致によって発生する

a = "abc"
num = 1

print(a + num)
    print(a + num)
          ~~^~~~~
TypeError: can only concatenate str (not "int") to str
'''

ValueError

演算子や関数の処理において、不適切な型を使用した場合に発生する

int("abc")
  int("abc")
ValueError: invalid literal for int() with base 10: 'abc'

AttributeError

オブジェクトがプロパティや、メソッドを呼び出す際に、指定されたプロパティやメソッドを持っていない場合に発生する。

これの例ではkuwaharu(Myclass)オブジェクトはageプロパティを持たないためエラーが起きる。

class Myclass:
    def __init__(self, name):
        self.name = name

    
kuwaharu = Myclass("kuwaharu")

print(kuwaharu.age)
    print(kuwaharu.age)
          ^^^^^^^^^^^^
AttributeError: 'Myclass' object has no attribute 'age'

この例ではリストオブジェクトはaddメソッドを持たないためエラーが起きる
※正しくは .append

num_list = [1, 2, 3, 4]

num_list.add(5)
    num_list.add(5)
    ^^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'add'

IndexError

存在しないインデックスを参照しようとすると発生する。
よくある原因繰り返し処理の中でリストなどの要素の数を超えてしまうこと

num_list = [0, 1, 2, 3, 4, 5]


for index in range(7):
    print(num_list[index])
    print(num_list[index])
          ~~~~~~~~^^^^^^^
IndexError: list index out of range

KeyError

存在しないキーを参照しようとすると発生する。
スペルミスなどが原因のことが多い

test_results = {
    "Alice": {"math": 85, "science": 92, "english": 78},
    "Bob": {"math": 79, "science": 85, "english": 88},
    "Charlie": {"math": 95, "science": 90, "english": 85},
    "Diana": {"math": 78, "science": 82, "english": 80},
    "Eve": {"math": 88, "science": 89, "english": 92},
}


print(test_results["alice"])
    print(test_results["alice"])
          ~~~~~~~~~~~~^^^^^^^^^
KeyError: 'alice'

ImportError

モジュールのインポートに問題があるときに発生する。
原因としてモジュールが存在しない、名前が衝突している、パスが違うなどがある

よく出てくる英単語

ほとんどChatGPT任せですが...

  • error: エラー

  • exception: 例外

  • failed: 失敗した

  • invalid: 無効な

  • missing: 不足している

  • undefined: 未定義の

  • unexpected: 予期しない

  • syntax: 構文

  • not found: 見つからない

  • type: 型

  • out of range: 範囲外

  • access denied: アクセス拒否

  • timeout: タイムアウト

  • deprecated: 非推奨

  • overflow: オーバーフロー

  • memory leak: メモリリーク

  • corrupt: 破損した

  • unhandled: 処理されない

  • reference: 参照

  • permission: 許可

  • connection: 接続

  • null: ヌル(null値、値がないこと)

  • unexpected token: 予期しないトークン

  • illegal: 不正な

  • unsupported: サポートされていない

  • unreachable: 到達不可能な

  • locked: ロックされた

  • conflict: 競合

  • interrupt: 割り込み

  • segmentation fault: セグメンテーションフォルト(メモリの不正アクセス)

  • resource: リソース

  • initialization: 初期化

  • parse: 解析する

  • overflow: オーバーフロー

  • underflow: アンダーフロー

  • read-only: 読み取り専用

  • write-only: 書き込み専用

  • divide by zero: ゼロ除算

  • stack overflow: スタックオーバーフロー

  • stack underflow: スタックアンダーフロー

  • buffer overflow: バッファオーバーフロー

  • invalid argument: 無効な引数

  • illegal argument: 不正な引数

  • out of memory: メモリ不足

  • assertion: アサーション

  • file not found: ファイルが見つからない

  • disk full: ディスク満杯

  • network: ネットワーク

  • protocol: プロトコル

  • hostname: ホスト名

  • unresolved: 未解決の

  • duplicate: 重複

この記事が気に入ったらサポートをしてみませんか?