web-dev-qa-db-ja.com

この予期しないキーワード引数TypeErrorを取得するのはなぜですか。

私は*args**kwargsでいくつかのコードをテストしています、そして、**kwargsの場合はdictionaryを書きました。何らかの理由で、私は到着しています

def func(*args, **kwargs):
    if args:
        second_test(*args)
    Elif kwargs:
        second_test(**kwargs)

def second_test(stringa, integera, floata):
    print("Name: %s, Problems Correct: %d, Points: %f" % (stringa, integera, floata))

profile_1 = ["David", 21, 132.00]
func(*profile_1)

profile_1a = {'Name': 'David', 'Problems Correct': 21, 'Points': 132.00}
func(**profile_1a)

コードはline 44から始まり、line 57で終わります。これが私が取得しているエラーです:

TypeError: second_test() got an unexpected keyword argument 'Name'

予期しないキーワード引数 "をグローグしましたが、定義を見つけることはできません。他のスタックオーバーフロー記事のみ。コードの何が悪いのですか?

6
David Dong

kwargsを関数に渡すときは、リスト内の正確な変数名を見つけることを期待します。代わりに辞書キーがstringaintegera、およびfloata関数が問題なく機能します。

そのため、関数変数名を変更する必要があります辞書のキー名を変更して作業に変更してください

1
Novice

キーワード引数は、「不明/予期しない」名前付き名前で渡されている引数です。

たとえば、1つの引数で関数を定義しましょう

def func(a):
    print(a)
 _

さて、この関数を「予期しない」という名前の引数で呼び出すと、

func(b=3) # remember we didn't define b as an argument
 _

それからTypeErrorを取得します。しかし、これらの「予期しない」という名前の引数を除くという機能を変更した場合は、前のコードを実行できます。

def func(a, **kwargs):
    print(a)
    print(kwargs["b"]) # now, if we pass an argument 'b' to the function, this will print its value (if we don't, we get a KeyError)

> func(3, b=15)
3
15

 _
1