必要な引数を渡していないエラーの原因と直し方
関数定義で必要な引数の数だけ、呼び出し時に値を渡していないときに出るエラーです。
エラーメッセージの読み方
Traceback (most recent call last):
main.py- ファイル名
4- 行番号 — 実際にクラッシュした行
<module>- 発生場所 — <module> ならトップレベル、関数名ならその関数の中
TypeError- 例外クラス — 何が起きたか。ここを検索するのが最短です
add() missing 1 required positional argument: 'b'- 詳細メッセージ — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 def add(a, b): 2 return a + b 3 4 print(add(3 )) ^
Traceback (most recent call last):
File "main.py", line 4, in <module>
print(add(3))
^^^^^^
TypeError: add() missing 1 required positional argument: 'b'
定義した引数の数だけ、呼び出し時にも値を渡す必要があります。1つでも足りないとTypeErrorになります。
直し方: 3 を 3, 4 にします。
広告
広告スロット(未設定)
パターン2
1 def greet(name, greeting): 2 return greeting + ", " + name 3 4 print(greet("Tom" )) ^
Traceback (most recent call last):
File "main.py", line 4, in <module>
print(greet("Tom"))
^^^^^^^^^^^^
TypeError: greet() missing 1 required positional argument: 'greeting'
第2引数を渡し忘れると、名前だけでは挨拶文を組み立てられません。
直し方: "Tom" を "Tom", "Hello" にします。
パターン3
1 def area(width, height): 2 return width * height 3 4 print(area(5 )) ^
Traceback (most recent call last):
File "main.py", line 4, in <module>
print(area(5))
^^^^^^^
TypeError: area() missing 1 required positional argument: 'height'
面積の計算には縦横2つの値が要ります。片方だけでは計算できないため呼び出し時点でエラーになります。
直し方: 5 を 5, 3 にします。
パターン4
1 def volume(l, w, h): 2 return l * w * h 3 4 print(volume(2, 3 )) ^
Traceback (most recent call last):
File "main.py", line 4, in <module>
print(volume(2, 3))
^^^^^^^^^^^^
TypeError: volume() missing 1 required positional argument: 'h'
3つの引数のうち1つでも足りないとエラーになります。体積の計算には縦・横・高さの3つがすべて必要です。
直し方: 2, 3 を 2, 3, 4 にします。
パターン5
1 def full_name(first, middle, last): 2 return first + " " + middle + " " + last 3 4 print(full_name("John" )) ^
Traceback (most recent call last):
File "main.py", line 4, in <module>
print(full_name("John"))
^^^^^^^^^^^^^^^^^
TypeError: full_name() missing 2 required positional arguments: 'middle' and 'last'
2つ以上の引数が同時に足りないと、メッセージは複数形になり不足している引数名が両方とも列挙されます。
直し方: "John" を "John", "Q", "Public" にします。
よくある誤解
デフォルト値の無い引数は、呼び出し時に必ず値を渡す必要があります。「無くても動くはず」という思い込みが原因になりやすいポイントです。
実務での勘所
引数の数が合わないエラーを未然に防ぐ設計として、デフォルト値(def greet(name, greeting="こんにちは"):)を設定する方法のほかに、Python 3特有のキーワード専用引数という書き方があります。def greet(name, *, greeting):のようにアスタリスクを挟むと、それ以降の引数は呼び出し時に必ずgreeting="..."のようにキーワードを明示しなければならなくなり、引数の順番や数を数え間違えるミス自体が起こりにくくなります。