引数エラーとは?Pythonでよくある原因と解決方法を初心者向けに解説

「引数エラーが出てプログラムが動かない」「Pythonで関数を呼び出したらエラーになった」という経験はありませんか?
プログラミング初心者がつまずきやすいエラーの一つが、引数に関するエラーです。
引数エラーは、関数やメソッドに渡す値の「数」「名前」「型」などが正しくない場合に発生します。
この記事では、Pythonを中心に、引数エラーの意味や代表的なエラー、原因、具体的な解決方法について初心者向けにわかりやすく解説します。
引数エラーとは?
引数エラーとは、関数やメソッドに渡した引数が、関数側が期待している条件と合わないことで発生するエラーです。
例えば、次のような関数を考えてみましょう。
def greet(name):
print("こんにちは、" + name + "さん")
この関数はnameという引数を1つ受け取ります。
正しく呼び出す場合は、次のようにします。
greet("太郎")
一方、引数を渡さなかったり、2つ渡したりするとエラーになります。
greet()
greet("太郎", "東京")
このように、関数が要求している引数と、実際に渡した引数が一致していないことが、引数エラーの代表的な原因です。
そもそも引数とは?
引数とは、関数に渡すデータのことです。
例えば、次のような関数があったとします。
def add(a, b):
return a + b
この関数に、次のように指定します。
add(10, 20)
この場合、10と20が引数として関数に渡されます。
add(10, 20)
↓
10 → a
20 → b
↓
10 + 20
↓
30
この場合、aとbは「仮引数」、10と20は「実引数」と呼ばれます。
初心者のうちは、「関数に渡す値=引数」と覚えておくとよいでしょう。
Pythonでよくある引数エラー
Pythonでは、引数に問題があるとさまざまなエラーが発生します。
特に覚えておきたいのが以下のエラーです。
TypeErrormissing required positional argumenttakes ... positional arguments but ... were givenunexpected keyword argumentmultiple values for argument
それぞれ詳しく見ていきましょう。
1. 引数が足りない場合
例えば、2つの引数を受け取る関数を作ります。
def add(a, b):
return a + b
この関数を、次のように呼び出すと引数が1つ足りません。
add(10)
この場合、次のようなエラーが発生します。
TypeError: add() missing 1 required positional argument: 'b'
原因
関数側では、
def add(a, b):
と2つの引数を指定しています。
しかし、呼び出し側では、
add(10)
と1つしか指定していません。
解決方法
必要な引数をすべて渡します。
add(10, 20)
これで正常に実行できます。
2. 引数が多すぎる場合
反対に、関数が受け取れる数以上の引数を渡してもエラーになります。
def greet(name):
print("こんにちは、" + name + "さん")
この関数に、2つの引数を渡してみます。
greet("太郎", "東京")
Pythonでは、次のようなエラーが表示されます。
TypeError: greet() takes 1 positional argument but 2 were given
原因
関数は、
def greet(name):
と1つの引数しか受け取りません。
しかし、
greet("太郎", "東京")
では2つの引数を渡しています。
解決方法
不要な引数を削除します。
greet("太郎")
もし2つの情報を渡したいのであれば、関数側を変更します。
def greet(name, city):
print(name + "さんは" + city + "に住んでいます")
そして、次のように呼び出します。
greet("太郎", "東京")
3. キーワード引数の名前が間違っている
Pythonでは、引数に名前を付けて渡すこともできます。
def greet(name):
print("こんにちは、" + name + "さん")
例えば、次のコードは正常に動作します。
greet(name="太郎")
しかし、次のようにするとエラーになります。
greet(username="太郎")
これは関数側にusernameという引数が存在しないためです。
例えば、次のようなエラーが表示されます。
TypeError: greet() got an unexpected keyword argument 'username'
解決方法
関数で定義されている引数名を確認します。
greet(name="太郎")
とすれば正常に実行できます。
4. 同じ引数に2回値を渡している
次のような関数があるとします。
def greet(name):
print("こんにちは、" + name + "さん")
そして、次のように呼び出したとします。
greet("太郎", name="次郎")
この場合、nameに対して2つの値を渡しているためエラーになります。
次のようなエラーが発生します。
TypeError: greet() got multiple values for argument 'name'
解決方法
同じ引数に複数の値を渡さないようにします。
greet("太郎")
または、次のようにします。
greet(name="太郎")
5. 引数の型が間違っている
引数の「数」だけでなく、「型」が原因でエラーになる場合もあります。
例えば、次の関数を考えてみましょう。
def add(a, b):
return a + b
これに対して、次のように指定すると問題が発生します。
add(10, "20")
10は整数型(int)ですが、"20"は文字列型(str)です。
そのため、
10 + "20"
という計算はできません。
結果として、TypeErrorが発生します。
解決方法
引数の型を揃えます。
add(10, 20)
または、文字列を整数に変換します。
add(10, int("20"))
引数エラーが発生したときの確認ポイント
引数エラーが発生したら、次の5項目を確認すると原因を見つけやすくなります。
① 引数の数を確認する
まず関数の定義を確認します。
def calculate(a, b, c):
この場合、基本的には3つの引数が必要です。
calculate(10, 20, 30)
のように、必要な数を渡しているか確認しましょう。
② 引数の名前を確認する
キーワード引数を使っている場合は、名前が一致しているか確認します。
def greet(name):
なら、次のように指定します。
greet(name="太郎")
次のように指定するのは間違いです。
greet(username="太郎")
③ 引数の型を確認する
例えば、次の関数があるとします。
def square(number):
return number * number
これに対して、
square("5")
とすると、文字列に対する演算になるため、意図した結果にならない可能性があります。
引数の型を確認するには、type()が便利です。
number = "5"
print(type(number))
実行すると、次のように表示されます。
<class 'str'>
④ 関数の定義を確認する
エラーが発生したら、関数を呼び出している場所だけを見るのではなく、関数そのものの定義を確認することが重要です。
例えば、
def calculate(price, tax):
return price * tax
なら、引数はpriceとtaxの2つです。
呼び出し側の、
calculate(1000)
だけを見るのではなく、
def calculate(price, tax):
まで戻って確認しましょう。
⑤ エラーメッセージを読む
Pythonのエラーメッセージには、問題を解決するための重要な情報が含まれています。
例えば、
TypeError: add() missing 1 required positional argument: 'b'
なら、missingという単語から「何かが不足している」と判断できます。
また、
2 were given
なら、「2つ渡された」という意味です。
エラーメッセージを怖がらずに読むことが、プログラミング上達の近道です。
デフォルト引数を使うと引数エラーを防げる
Pythonでは、引数にデフォルト値を設定できます。
def greet(name="ゲスト"):
print("こんにちは、" + name + "さん")
この場合、
greet()
と呼び出してもエラーになりません。
nameが指定されていない場合は、自動的に"ゲスト"が使われます。
greet("太郎")
とすれば、
こんにちは、太郎さん
と表示されます。
デフォルト引数は、引数を省略した場合にも動作させたいときに便利です。
*argsを使って複数の引数を受け取る
渡される引数の数が決まっていない場合は、*argsを使う方法があります。
def total(*args):
return sum(args)
この関数なら、
total(10, 20)
だけでなく、
total(10, 20, 30, 40)
のように複数の引数を渡せます。
*argsを使うことで、可変個数の引数を受け取れます。
**kwargsを使ってキーワード引数を受け取る
キーワード引数を柔軟に受け取りたい場合は、**kwargsを使います。
def show_info(**kwargs):
print(kwargs)
例えば、
show_info(name="太郎", age=20)
とすると、渡されたキーワード引数をまとめて受け取れます。
**kwargsは、引数の名前や数が固定されていない処理などで利用されます。
引数エラーとSyntaxErrorは違う
初心者が混同しやすいのが、引数エラーとSyntaxErrorです。
引数エラーは、関数に渡した値の数や名前、型などに問題がある場合に発生します。
一方、SyntaxErrorは、Pythonの文法そのものが間違っている場合に発生します。
例えば、次のコードでは、文法上必要な:がありません。
if x > 10
print(x)
この場合はSyntaxErrorになります。
つまり、次のようにエラーの種類を区別することが重要です。
- 引数の問題 →
TypeErrorなど - 文法の問題 →
SyntaxError
引数エラーを解決するための基本手順
引数エラーが発生した場合は、次の手順で確認しましょう。
STEP1:エラーの種類を確認する
まず、
TypeError
など、エラーの種類を確認します。
STEP2:エラーメッセージを読む
例えば、
missing 1 required positional argument
なら、引数が不足しています。
STEP3:関数の定義を確認する
def add(a, b):
のように、関数が何個の引数を要求しているのか確認します。
STEP4:関数を呼び出している場所を確認する
add(10)
など、実際にどのような引数を渡しているのか確認します。
STEP5:数・名前・型を比較する
以下の3点を比較します。
- 引数の数
- 引数の名前
- 引数の型
これだけでも、多くの引数エラーを解決できます。
引数エラーは初心者にとって重要な学習材料
プログラミング初心者にとって、エラーは「失敗」ではありません。
引数エラーが発生したということは、「関数がどのようなデータを必要としているのか」を理解するチャンスです。
例えば、
missing 1 required positional argument
というエラーが出たなら、
「この関数には、もう1つ引数が必要なのか」
と考えることができます。
このようにエラーメッセージを一つずつ読み解いていくことで、関数や引数に対する理解も深まります。
まとめ:引数エラーは「関数と渡した値のズレ」を確認しよう
引数エラーとは、関数が期待している引数と、実際に渡した引数が一致していないことで発生するエラーです。
特にPythonでは、以下のような原因が代表的です。
- 引数の数が足りない
- 引数を渡しすぎている
- 引数の名前が間違っている
- 同じ引数に複数の値を渡している
- 引数の型が適切ではない
エラーが発生したら、まずは関数の定義と呼び出し部分を見比べることが重要です。
「どんな引数を何個受け取る関数なのか?」を確認する習慣をつければ、引数エラーはそれほど難しいものではありません。
プログラミングでは、エラーメッセージを読みながら原因を特定する力が非常に重要です。引数エラーをきっかけに、関数・引数・戻り値の仕組みをしっかり理解しておきましょう。




