僕たちの失敗 ~Pythonエラーコード集~
いままでやらかした、エラーコードを集めていきます。
今後もどんどん増える予定
いままで発生させたエラー集です。
自分の備忘録に近いので、見づらいかと思います。
公開はしてますので、万が一誰かの参考になれば幸いです。
※あくまでも私が体験し解決したものです。こうすればOKかもしれない程度に参考にして下さい。
- float() argument must be a string or a number, not ‘NoneType’
- ModuleNotFoundError: No module named ‘xxx’
- name ‘ XXX’ is not defined
- numpy.linalg.LinAlgError: 1-dimensional array
- OSError: [Errno 22] Invalid argument: ‘\u202aC:/Users/XXXXXX.csv’
- SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 12-13: truncated \UXXXXXXXX escape
- SyntaxError: ‘break’ outside loop
- SyntaxError: invalid character in identifier
- SyntaxError: invalid syntax
- TypeError: expected string or bytes-like object
- TypeError: unsupported operand type(s) for *: ‘NoneType’ and ‘float’
- UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x89 in position 3: invalid start byte
- ValueError: invalid literal for int() with base 10: ‘XXX’
- ZeroDivisionError: division by zero
float() argument must be a string or a number, not ‘NoneType’
内容:NoneType(値なし)にfloat()を使用している。
解決法:float()を使用して良いのは、数字(2.3)か数字の文字列(’2.3′)
ModuleNotFoundError: No module named ‘xxx’
内容:’xxx’という名前のモジュールがない
解決法:①名前入れ間違えの場合は修正
②xxxが通常のモジュールではない場合はインストールしてから使う
name ‘ XXX’ is not defined
内容:文字列’xxx’が定義されていない状態で計算等に使用されている。
解決法:必要なら計算より前で定義(xxx=12など)。
現時点で不要であるが定義する場合、「XXX = 0」「xxx(#list) =[]」などで定義
numpy.linalg.LinAlgError: 1-dimensional array
内容:numpy.linalg.solveで連立方程式を解こうとしたときに発生、解けない値をインプットした。
解決法:左辺の数=左辺の変数の数=右辺の数になっている必要がある。
from numpy.linalg import solve
left = [[1,2,3],[4,5,6],[7,8,9] #左辺の数=[]の数=3、左辺の変数の数 =[]内の数字= 3
right = [1,2,3] #右辺の数 = []内の数字 =3
solve(left, right)
OSError: [Errno 22] Invalid argument: ‘\u202aC:/Users/XXXXXX.csv’
内容:with orenでローカルフォルダのcsvを開こうとした際に発生。
解決法:パスをコピペしたときに「表示では見えない何か」もコピーしてしまった。手入力で解決。
SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 12-13: truncated \UXXXXXXXX escape
内容:with orenでローカルフォルダのcsvを開こうとした際に発生。C:\~\と入力
解決法:ファイルのパスはC:/~/が正しい。¥(バックスラッシュ)ではなく/(スラッシュ)で区切る
SyntaxError: ‘break’ outside loop
内容:whileのループを止めるbreakが、whileの外に存在する。こんな感じ
while True:
if~
break
解決法:breakはwhile(またはfor)の構文内に置く。
SyntaxError: invalid character in identifier
内容:文字列の片側に「’」をつけ忘れた。
解決法:必要な「’」を探してつける。
SyntaxError: invalid syntax
内容:ifやwhileなどの文末に「:」を忘れた。
解決法:if、while、defなどの文末には「:」をつける。
TypeError: expected string or bytes-like object
内容:文字列(str)が求められているところに数字(int)をいれた。
bytes-like objectはいまいち分からん・・・
自分が発生させたのは、正規表現で数字を判定対象とした。
re.match(\d, 1)
解決法:エラーが出ているところの数字をstr()等で文字列に変換する。
TypeError: unsupported operand type(s) for *: ‘NoneType’ and ‘float’
内容:四則演算の値にNoneType(値なし)が存在
解決法:どれが値なしかを探す。type()でその文字列がint、float等の型を判定できる。
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x89 in position 3: invalid start byte
内容:csvファイルを読み込む際に発生。(具体的には百人一首のcsvファイル)
解決法:文字コードutf-8で開けなかった。encoding = ‘shift_jis’や’cp932’を試してみる。
ValueError: invalid literal for int() with base 10: ‘XXX’
内容:input()で入力時に整数にで受け取りたい。int(input())として小数(xxx)を入力した。
解決法:小数を入力しない。または、try/ except や if/elseでエラー発生時の処理を決める。
ZeroDivisionError: division by zero
内容:0で割ってしまっている。下のようなパターンで引っかかった。
list_a = []
b =70
c = b/len(list_a)
for row in x:
list_a.append(row)
つまり、最終的には0で割らなくても、0で割ってしまっているパターンがある。
解決法:0で割る瞬間がないようにする。特に文字で割っているものは注意。
閑話休題:「ゼロで割る」というと現代SFの重要作家テッド・チャンの短編を思い出します。
「ゼロで割る」が解をもつことを証明してしまった数学者。数学が、世界が崩れ去った世界で数学者は何を見るのか。