Skyのブログ

理工系学生が色々と書きます!

これで大丈夫!Python初心者によくあるエラーまとめ!【Pythonエラー一覧】

■記事内容
今回は、Pythonの初心者によくありがちなエラーを10個ほどまとめてみました。

エラーがなかなか解決できないという事はよくあることです。

エラーの原因や注意すべきポイントなども詳しくまとめているので是非ご覧ください。

Python3つの基本的な学習方法↓
sky-blog.hateblo.jp


なぜエラーが起きるのか?(構文エラーと例外の違い)

まず最初にPythoのエラーには、構文エラー(Syntax error)例外(exception)の2種類あります。

構文エラー(Syntax error)は構文の誤りによって発生するエラーなのに対し、例外は構文は正しくても発生するエラーのことを言います。
基本的に構文エラーも例外もまとめてエラーと呼ばれることが多いですがこの2つの違いを抑えておきましょう。この記事では構文エラーと例外の両方をエラーとして表記しています。


エラーメッセージの確認方法

例としてエラーを起こしてみました。
プログラムにエラーが発生すると以下のようなメッセージが表示され、エラー内容、ファイル名、エラーの行番号などが表示されます。

#Sample.py

print("Hello Python"
  File "Sample.py", line 1

SyntaxError: unexpected EOF while parsing

今回の場合は、最終行を見るとSyntaxErrorと書かれていています。

初心者によくあるエラー

SyntaxError

このエラーは、構文に誤りがある場合に発生するエラーです。プログラミングエディタなどを使用するとコードを実行する前に教えてくれます。
例)全角と半角のミス、括弧()やコロン:が足りないなど

#Sample1.py

#括弧が対応していない
print("Hello Python"

#SyntaxError: invalid syntax
#Sample1.py

#訂正例
print("Hello Python")
# Hello Python
#Sample2.py

#全角と半角の違い(今回の場合はイコール)
Strings = "Hello Python" 

#SyntaxError: invalid syntax
#Sample2.py

Strings = "Hello Python" 

IndentationError

インデントが正しく行われていない場合に起きるエラーです。
このエラーはまだ段階構造が理解できていない場合によくやりがちなものです。
例)インデントをしていない、インデントが合っていない

#Sample3.py

for i in range(5):
print(i)

#IndentationError: unindent does not match any outer indentation level
#Sample3.py

for i in range(5):
    print(i)

# 0 1 2 3 4

TypeError

Type Errorは、データ型に誤りがある場合などに起きるエラーです。
例)文字列型(string型)と数値型(int型)を演算しようとしているなど

#Sample4.py

str = "1"
int = 1
print(str+int)
#TypeError: unsupported operand type(s)


■注意点
他のプログラミング言語では簡易的なものではれば自動で型変換を行ってくれる物もありますがPythonは行わないので別の型の扱いには注意しましょう!

IndexError

InddexErrorは、リスト型やタプル型で値を取得しようとする際に、範囲外を指定している場合に起こるエラーです。
例)インデックスを1から始めている

#Sample5.py

fruits = ["apple","banana","orange","cherry"]
print(fruits[4])

#IndexError: list index out of range
#Sample5.py

fruits = ["apple","banana","orange","cherry"]
print(fruits[3])

# cherry


■注意点
インデックスは「0」から始まります。1から始めてしまうと1つずつずれてしまうので注意しましょう。
今回の場合は"apple"が0"banana"が1"orange"2"cherry"3が正しいインデックスになります。

KeyError

KeyErrorは、辞書型でキーが存在しない場合に起こるエラーです。
IndexErrorと似ているのでまとめて覚えておきましょう!
例)キーが存在しない

#Sample6.py

fruits = {"apple":3,"banana":"2","orange":"2","cherry":1}
print(fruits["lemon"])

#KeyError: 'lemon'
#Sample6.py

fruits = {"apple":3,"banana":"2","orange":"2","cherry":1}
print(fruits["cherry"])

# 1

存在しないキーに対してpop()関数やdelを使うと同様にKeyErrorになります。

AttributeError

AttributeErrorは、オブジェクトに存在しないメソッドを実行しようとしている場合に起こります。属性とはオブジェクトにある変数やメソッド(関数)のことを指します。
例)メッソド(関数)や属性が存在しない

#Sample7.py

import random
print(random.randam(0,10))

#AttributeError: module 'random' has no attribute 'randam'
#Sample7.py

import random 
print(random.randint(0,10))

# 0 ~ 10の中から1つ選ばれる

このように randomオブジェクトには randamという属性は存在しません。なのでAttributeErrorが発生します。




NameError

NameErrorは、変数を取得しようとした際に定義されていない変数名を使用した場合に起きるエラーです。
例)スペルミス、モジュールのインポートをしていない

#Sample8.py

a = "Hello Python"
print(b)

NameError: name 'b' is not defined
#Sample8.py

a = "Hello Python"
print(a)

#Hello Python
#Sample9.py

#<失敗例>モジュールをインポートしていない

print(random.randint(0.10))

#NameError: name 'random' is not defined
#Sample9.py

import random 

print(random.randint(0.10))

#1~10の乱数



ImportError(v3.6以前) / ModuleNotFoundError(v3.6以降)

ImportError/ ModuleNotFoundErrorはインポートしたモジュールが見つからない場合に発生します。
Pythonのインストールと同時に入っているモジュール以外は自分で導入が必要になります。
例)モジュールのインストールをしていない

ライブラリーのインストール方法はこちら↓
sky-blog.hateblo.jp

ZeroDivisionError

ZeroDivisionErrorは0で割り算をしようとすると発生するエラーです。
エラーが起きないよう例外処理をしっかりしましょう。

#Sample10.py

print(2/0)

#ZeroDivisionError: division by zero
try:
    print(2/0)
except:
    print("0で割ろうとしています!")

# 0で割ろうとしています!
#Sample10.py

try:
    print(2/0)
except:
    print("0で割ろうとしています!")

# 0で割ろうとしています!
UnboundLocalError

UnboundLocalErrorは、関数の中で関数の外の変数(グローバル変数)を扱う際に起こることがあるエラーです。
このエラーはスコープの概念を理解していないといけないのでまだ理解していない人は理解してからにしましょう。

#Sample11.py

a = "Hello Java"
def function():
    print(a)
    a = "Hello Python"

function()

#UnboundLocalError: local variable 'a' referenced before assignment

このエラーの原因を解説します。まず変数aは定義されているのでなぜと思う型もいると思います。
通常、変数名を探索する際にローカールスコープから探索されローカルスコープにない場合外側のスコープから探索されます。
Pythonはローカルスコープ内に同じ名前の変数を見つけた場合ローカルスコープ内から値を取得しようとします。ですが変数が定義された後に実行されているのか定義前に実行されているかは考慮しないので
定義前にローカルスコープ内で使用するとエラーが起きます。
修正例

#Sample12.py

a = "Hello Java"
def function():
    a = "Hello Python"
    print(a)

function()

# Hello Python
#Sample13.py

a = "Hello Java"
def function():
    global a
    print(a)
    a = "Hello Python"

function()

# Hello Java

まとめ

今後プログラミングをやっていてエラーにあたることが多くあると思いますが基本的なエラーで時間を取られてしまうのは勿体無い事です。今回紹介した中では、特に、UnboundLocalErrorは初心者の方はちゃんと理解している人はあまり多くないと思います。まずは基礎を固めてエラーに対処できるようにしていきましょう!

Python学習ロードマップ↓
sky-blog.hateblo.jp



Pythonのおすすめの本まとめ↓
sky-blog.hateblo.jp.


Python3つの基本的な学習方法↓
sky-blog.hateblo.jp