今回はpythonでよく出会うエラーとその内容、そして解決方法をコード付きで解説します。
javaのエラー解決はこちら↓
実際にエラーを発生させるコードも載せるので、pythonを手元で実行できる人は実際に手を動かしてみてください。
では早速pythonのエラーを見ていきましょう!
1. SyntaxError
一つ目のエラーはSyntaxErrorです。体感では一番よく見るエラーな気がします。
実際にエラーを起こしてみます。
main.pyに以下のコードを書いて実行してみます。
if True
print("Hello")
実行結果は次のようになりました。
File "main.py", line 1
if True
^
SyntaxError: expected ':'
pythonはエラーの時に結構詳しく教えてくれるので解説はいらないかも知れませんが、SyntaxErrorは構文が不正であることが原因です。
今回の例ではmain.pyの1行目、Trueの後に、’ : ‘ が必要ですよと教えてくれています。
指示通りに修正してもう一度実行してみましょう。
if True:
print("Hello")
エラーが発生せずにコンソールにHelloと文字列が表示されると思います。
Syntax Errorは焦らずエラー文をよく読んで、構文が間違っている場所を修正すれば解決することができます!
2. NameError
2つ目はNameErrorです。これは定義していない変数にアクセスしようした時に発生するエラーです。
これも実際にエラーを起こしてみましょう。
print(x)
これだけ書いて実行すると、
File "main.py", line 1
print(x)
NameError: name 'x' is not defined
この結果が得られました。これもエラー内容が詳細に書かれているのでわかると思いますが、xは定義されてないよと教えてくれています。
なので先にxを定義しておけば解決することができます。
x = 10
print(x)
これを実行するとエラーが発生せずに、10とコンソールに出力されるはずです。
3. TypeError
次はTypeErrorです。これは先にエラーを発生させてみます。
print("The result is: " + 5)
実行結果は次のようになります。
File "main.py", line 1
print("The result is: " + 5)
TypeError: can only concatenate str (not "int") to str
先ほどまでと比べると少し難しいかも知れません。まず元のコードで何をしようとしているかですが、文字列と数字に+演算子を使用しています。
数字 + 数字なら普通に計算、文字列 + 文字列なら文字列の結合をすることができます。
ただ今回は文字列 + 数値としているのでエラーが発生しています。エラー文にも、strはstr型のみに結合することができるよと書いてありますね。
なのでエラーを解消するために数字の5を文字列に変換してあげましょう。
print("The result is: " + str(5))
こうすることで、The result is 5と言う文字列がコンソールに表示されるはずです。
4. IndexError
続いてはIndexErrorです。これも先にエラーを発生させてみましょう。
lst = [1, 2, 3]
print(lst[3])
実行してみます。
File "main.py", line 2
print(lst[3])
IndexError: list index out of range
IndexErrorは配列の無効なインデックスにアクセスしようとした時に発生します。pythonで配列のインデックスは0から始まります。
元の配列lstは要素が3つなのでインデックスとしては0から2までです。
そこへインデックス3でアクセスしようとしたためエラーが発生しています。
エラー文にもインデックスが範囲外だよと書いてあります。なのでインデックスを有効範囲のものに直せばエラーが解決されます。
lst = [1, 2, 3]
print(lst[2])
実行すると、3がコンソールに表示されるはずです。
5. ValueError
5個目はValueErrorです。これもエラー出しちゃいましょう。
int("abc")
実行すると、
File "main.py", line 1
int("abc")
ValueError: invalid literal for int() with base 10: 'abc'
このような結果が得られます。まず元のコードではabcと言う文字列をint型に変更しようとしています。
文字列の”123″をint型の123に変更するのはできますが、abcを数字にできる訳ないですよね。
このような時にこのエラーは発生します。
エラー文を見てみると、int()メソッドに対して’abc’は無効なリテラルだよと教えてくれています。
解消方法ではないですが、’123’に対して同じ操作をすると、エラーが発生せずint型に変換することができます。
int("123")
6. KeyError
最後に紹介するのはKeyErrorです。
d = {"a": 1, "b": 2}
print(d["c"])
このコードを実行してみてください。
File "example.py", line 2
print(d["c"])
KeyError: 'c'
このようなエラーが発生します。IndexErrorと似ていますが、KeyErrorはディクショナリで存在しないkeyを用いてvalueにアクセスしようとした時に発生します。
元のコードのディクショナリにはaとbと言うキーしかありません。そこへcというkeyでアクセスしようとしたためKeyErrorが発生しました。
なので存在するkeyを用いればエラーを解消することができます。
例えばkeyがfruitなのにfruitsと複数形にしてアクセスしようとしていたなんて時もあるので、スペルミスも含めてKeyを見直してみましょう。
一応エラーが出ないコードも載せておきます。
d = {"a": 1, "b": 2}
print(d["a"])
まとめ
今回はpythonで比較的よくみるエラーの解説と簡単な解決方法を紹介しました。pythonのエラーは他の言語と比べるとわかりやすく出してくれています。
エラーが出たからって怖がることなく冷静にエラー文を読めば解決できるものが多いので頑張ってみてください!
コメント