TypeError: get() 不接受关键字参数

93 投票
3 回答
135480 浏览
提问于 2025-04-18 11:24

我试了一些代码,比如:

converted_comments[submission.id] = converted_comments.get(submission.id, default=0)

这里的 converted_comments 是一个 dict(字典)。但是我遇到了一个错误,错误信息是:

TypeError: get() takes no keyword arguments

文档里似乎显示 dict.get 确实有一个叫 default 的参数。

get(key[, default])

如果 key 在字典里,就返回 key 对应的值;如果不在,就返回 default。如果没有提供 default,它默认返回 None,所以这个方法不会抛出 KeyError 错误。

那到底哪里出问题了,为什么它没有像我预期的那样工作呢?

3 个回答

12

很多文档和教程,比如这个 https://www.tutorialspoint.com/python/dictionary_get.htm,错误地把语法写成了

dict.get(key, default = None)

其实应该是

dict.get(key, default)

198

因为Python的C级接口开发方式,有很多内置的函数和方法其实并没有为它们的参数起名字。即使文档里提到某个参数叫default,这个函数也不会把default当作可选的第二个参数来识别。你必须按照参数的位置来提供这些参数:

>>> d = {1: 2}
>>> d.get(0, default=0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: get() takes no keyword arguments
>>> d.get(0, 0)
0
40

这个错误信息的意思是,get这个函数不接受关键字参数,但你却给它传了一个关键字参数,具体是default=0

converted_comments[submission.id] = converted_comments.get(submission.id, 0)

撰写回答