Code Fix

中級

TypeError: missing 1 required positional argument の原因と直し方

関数定義で必要な引数の数だけ、呼び出し時に値を渡していないときに出るエラーです。

エラーメッセージの読み方

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になります。

直し方: 33, 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つの値が要ります。片方だけでは計算できないため呼び出し時点でエラーになります。

直し方: 55, 3 にします。

この問題を解いてみる →

よくある誤解

デフォルト値の無い引数は、呼び出し時に必ず値を渡す必要があります。「無くても動くはず」という思い込みが原因になりやすいポイントです。

まとめ

TypeError: missing 1 required positional argumentは中級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)