本記事では、TypeError: 関数名() got multiple values for argument '引数'のエラー原因と解決方法を紹介します。
原因
関数の引数に複数の値を渡しているため発生しているエラーです。
よくあるケースが以下の通りです。
よくある原因
- 位置引数とキーワード引数の混同により、一つの引数に複数の値を受け渡すケース
-
クラス内関数の
selfの付け忘れ
解決方法
具体的な実装を用いて解決方法を確認していきます。
下記では正常に動作するfunc関数と、selfを付け忘れ正常に動作しないerror_funcを持つTempクラスを定義しています。
位置引数とキーワード引数の混同
まず、関数の呼び出し方が原因で発生する表題のエラーを再現します。
上記のエラー発生例では、func関数の引数aに対して
位置引数でaに1が渡されているにもかかわらず、キーワード引数でもaに2が渡されるため上記エラーが発生します。
解決方法としては、単純ですが、想定する引数に値が渡せているか確認する再確認が必要です。
安全な対処としては、すべてキーワード引数で値を渡すことでミスを減らすことができます。
クラス内関数のselfの付け忘れ
こちらは値の渡し方によってエラーが変わるため、気付きにくくハマる可能性のある実装ミスです。
まず、エラーを再現します。
上記エラーはすべてselfの付け忘れに起因するものです。
コメントにエラー内容を記載していますが、引数の指定方法によりエラー内容が異なっています。
クラス内関数を呼び出す場合、暗黙的に位置引数の1番目にselfに該当するオブジェクトを渡そうとします。
このため、1つの目のエラーでは、引数aにTempオブジェクトを渡すこととなり、Tempオブジェクトとbの乗算となりエラーが発生します。
2つ目のエラーでは、暗黙的にselfを追加した計3つの引数がerror_funcに渡されることによりエラーが発生します。
最後に、3つ目4つ目のエラーでは、位置引数の1番目でaにselfオブジェクトが渡されているにも関わらず、キーワード引数で再度aに2を渡そうとしているため表題のエラーが発生しています。
解決方法は、クラス内関数にselfを指定することです。
確認項目
- 位置引数とキーワード引数など想定通りの値を渡しているか?
-
クラス内関数に
selfは付いているか?


0 件のコメント :
コメントを投稿