こんにちは、PyQサポートです。
今回は SyntaxError: positional argument follows keyword argument
というエラーの意味と、その原因を解説します。
質問:positional argument follows keyword argumentとは何ですか?
positional argument follows keyword argument
というエラーが出ました。
このエラーが出る原因を教えてください。
回答:引数の指定に問題があるという文法エラーです
エラーメッセージ positional argument follows keyword argument
を直訳すると「位置引数がキーワード引数に続いている」という意味で、これは引数の指定に問題があるという文法エラーです。
Pythonでは、関数やメソッドに引数を与える方法として、位置引数とキーワード引数があります。
これらをあわせて使用する場合、キーワード引数の後に位置引数を書けないというルールになっています。
SyntaxError: positional argument follows keyword argument
は、そのルールに違反しているというエラーです。
では以下の関数を例に、位置引数とキーワード引数について説明します。
def print_wage(name, wage, hours): print(f"{name}さんの給料は{wage * hours}円です")
位置引数とは
たとえば上記の関数は以下のように実行できます。
print_wage("田中", 1100, 5)
このとき、print_wage()
に与えた3つの引数は、前から順番にそれぞれname
、wage
、hours
に代入されます。
そのため、実行結果は以下のようになります。
田中さんの給料は5500円です
このような引数の渡し方を位置引数と言います。
キーワード引数とは
以下のように、値を渡す引数名を指定することで、引数の順番を変更できます。
(実行結果は上記と同じです)
print_wage(hours=5, name="田中", wage=1100)
このような引数の渡し方をキーワード引数と言います。
位置引数とキーワード引数をあわせて使う
位置引数とキーワード引数は、以下のように組み合わせて使うこともできます。
print_wage("田中", hours=5, wage=1100)
この場合、最初の"田中"
は位置引数として、残りはキーワード引数として扱われます。
ここで注意しなければならないことは、キーワード引数の後に位置引数を書けないということです。
以下のようにキーワード引数の後に位置引数を書くと、エラーになります。
print_wage(hours=5, "田中", 1100)
実行結果
print_wage(hours=5, "田中", 1100) ^ SyntaxError: positional argument follows keyword argument
キーワード引数の後に書く引数は、すべてキーワード引数にしましょう。