12

私は署名付きの機能を持つライブラリを使用していますf(*args, **kwargs)。kwargs引数にpython dictを渡す必要がありますが、dictにはキーワードに文字列が含まれていません

f(**{1: 2, 3: 4})
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: f() keywords must be strings

関数を編集せずにこれを回避するにはどうすればよいですか?

4

2 に答える 2

12

文字列以外のキーワード引数は単に許可されていないため、この問題に対する一般的な解決策はありません。特定の例は、キーdictを文字列に変換することで修正できます。

>>> kwargs = {1: 2, 3: 4}
>>> f(**{str(k): v for k, v in kwargs.items()})
于 2013-02-20T14:10:16.470 に答える
1

あなたができる最善のことは、辞書内の文字列以外の引数を除外することだと思います:

kwargs_new = {k:v for k,v in d.items() if isinstance(k,str)}

その理由は、キーワード引数は文字列でなければならないからです。そうでなければ、彼らは反対側で何に開梱しますか?

または、文字列以外のキーを文字列に変換することもできますが、キーを上書きするリスクがあります。

kwargs_new = {str(k):v for k,v in d.items()}

-- 次のものから始めたらどうなるか考えてみてください。

d = { '1':1, 1:3 }
于 2013-02-20T14:10:21.903 に答える