中級のPythonエラー 45問
15種類のエラーを、それぞれ複数パターンずつ収録しています。
- AttributeError: 'NoneType' object has no attribute の原因と直し方Noneに対してメソッドを呼び出したときに出るエラーです。関数が値を見つけられずNoneを返す場面や、辞書のgetでキーが無かった場合に起きやすいパターンです。
- AttributeError: object has no attribute(メソッド名タイプミス)の原因と直し方メソッド名の綴りミスや、他言語の命名習慣(add・trim・toUpperCaseなど)を持ち込んだときに出るエラーです。
- KeyError の原因と直し方辞書に存在しないキーへアクセスしたときに出るエラーです。大文字小文字の違いも別のキーとして扱われます。
- ValueError: invalid literal for int() with base 10 の原因と直し方int()に数字以外の文字を含む文字列を渡したときに出るエラーです。小数点表記や空文字列も変換できません。
- TypeError: missing 1 required positional argument の原因と直し方関数定義で必要な引数の数だけ、呼び出し時に値を渡していないときに出るエラーです。
- TypeError: takes N positional arguments but M were given の原因と直し方関数に定義されている数より多くの引数を渡したときに出るエラーです。
- TypeError: missing 1 required positional argument: 'self' の原因と直し方クラスのメソッドをインスタンスを介さずに呼び出したときに出るエラーです。selfには本来インスタンス自身が自動で渡されます。
- UnboundLocalError: cannot access local variable の原因と直し方関数内で変数に代入すると、Pythonはその変数を自動的にローカル変数とみなします。代入より前に参照すると発生します。
- TypeError: 'str' object does not support item assignment の原因と直し方文字列の一部を直接書き換えようとしたときに出るエラーです。Pythonの文字列は不変(immutable)です。
- // と / の違い(整数除算と真の除算)// は切り捨て除算、/ は常に浮動小数点数を返す真の除算です。小数の結果が欲しい場面で // を使うと、エラーなく結果だけが狂います。
- TypeError: 'tuple' object does not support item assignment の原因と直し方タプルの要素を書き換えようとしたときに出るエラーです。丸括弧のタプルと角括弧のリストは見た目が似ていますが、変更可能かどうかが根本的に違います。
- 関数内でグローバル変数を更新できない(globalキーワード忘れ)関数の中で変数に代入すると、その変数は既定でローカル変数になります。外側の変数を更新したいときはglobal宣言が必要です。
- 剰余演算 % の符号がJavaと異なる理由Pythonの%は除数の符号に合わせた結果を返します。Javaなど多くの言語は被除数の符号に合わせるため、負の数を扱うと結果が変わります。
- f忘れでf文字列が展開されないf文字列のfを書き忘れると、波括弧の中身は変数として展開されず、そのままの文字として表示されます。
- range()の範囲指定でループが1回分ずれるrange()の終端は指定した値を含みません。全要素を回すつもりでrange(len(...) - 1)のように書くと、最後の1つが抜け落ちます。