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

「引数エラーが出てプログラムが動かない」「Pythonで関数を呼び出したらエラーになった」という経験はありませんか?

プログラミング初心者がつまずきやすいエラーの一つが、引数に関するエラーです。

引数エラーは、関数やメソッドに渡す値の「数」「名前」「型」などが正しくない場合に発生します。

この記事では、Pythonを中心に、引数エラーの意味や代表的なエラー、原因、具体的な解決方法について初心者向けにわかりやすく解説します。

引数エラーとは?

引数エラーとは、関数やメソッドに渡した引数が、関数側が期待している条件と合わないことで発生するエラーです。

例えば、次のような関数を考えてみましょう。

def greet(name):
    print("こんにちは、" + name + "さん")

この関数はnameという引数を1つ受け取ります。

正しく呼び出す場合は、次のようにします。

greet("太郎")

一方、引数を渡さなかったり、2つ渡したりするとエラーになります。

greet()
greet("太郎", "東京")

このように、関数が要求している引数と、実際に渡した引数が一致していないことが、引数エラーの代表的な原因です。

そもそも引数とは?

引数とは、関数に渡すデータのことです。

例えば、次のような関数があったとします。

def add(a, b):
    return a + b

この関数に、次のように指定します。

add(10, 20)

この場合、1020が引数として関数に渡されます。

add(10, 20)
    ↓
  10 → a
  20 → b
    ↓
  10 + 20
    ↓
   30

この場合、abは「仮引数」、1020は「実引数」と呼ばれます。

初心者のうちは、「関数に渡す値=引数」と覚えておくとよいでしょう。

Pythonでよくある引数エラー

Pythonでは、引数に問題があるとさまざまなエラーが発生します。

特に覚えておきたいのが以下のエラーです。

  • TypeError
  • missing required positional argument
  • takes ... positional arguments but ... were given
  • unexpected keyword argument
  • multiple 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

なら、引数はpricetaxの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では、以下のような原因が代表的です。

  • 引数の数が足りない
  • 引数を渡しすぎている
  • 引数の名前が間違っている
  • 同じ引数に複数の値を渡している
  • 引数の型が適切ではない

エラーが発生したら、まずは関数の定義と呼び出し部分を見比べることが重要です。

「どんな引数を何個受け取る関数なのか?」を確認する習慣をつければ、引数エラーはそれほど難しいものではありません。

プログラミングでは、エラーメッセージを読みながら原因を特定する力が非常に重要です。引数エラーをきっかけに、関数・引数・戻り値の仕組みをしっかり理解しておきましょう。

 

対面・無料のプログラミング講座|東京で毎週開催|初心者向けPython講座

テックジムPython基礎コース(初心者向け)

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら