TypeError:get()不带关键字参数

its*_*ang 49 python

我是Python的新手,我正在尝试基本上创建一个哈希表,检查一个键是否指向表中的值,如果不是,则将其初始化为空数组.我的代码的违规部分是行:

converted_comments[submission.id] = converted_comments.get(submission.id, default=0)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

TypeError: get() takes no keyword arguments
Run Code Online (Sandbox Code Playgroud)

但是在文档(以及各种示例代码)中,我可以看到它确实采用了一个默认参数:

https://docs.python.org/2/library/stdtypes.html#dict.get http://www.tutorialspoint.com/python/dictionary_get.htm

以下是get()方法的语法:

dict.get(key,default = None)

在堆栈上没有任何关于这个,所以我认为这是一个初学者的错误?

use*_*ica 102

由于Python C级API的开发方式,许多内置函数和方法实际上没有参数的名称.即使文档调用参数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
Run Code Online (Sandbox Code Playgroud)

  • 你提示,但没有明确说明:python函数通常允许任意命名参数.C级API是规则的一个例外. (25认同)
  • 哇,我使用python已有7年了,但我不知道有些函数不接受关键字参数。真是奇怪,解释器肯定可以维护内置函数及其参数名的字典,以便它可以接受运行时成本几乎为零的关键字参数?(唯一的花费将是在字节码生成期间,这将非常小。) (2认同)
  • @max:在编译时无法解析参数名称,因为您正在调用的可调用对象在编译时无法解析。无论如何,使其成为编译时的东西本质上不会使所有C函数和方法都采用关键字参数。无论哪种方式,人们都必须手动添加所有缺少的参数名称元数据,并且他们可以(但不能)在当前设计下做到这一点。 (2认同)

GWW*_*GWW 23

错误消息说get没有关键字参数,但是你提供了一个default=0

converted_comments[submission.id] = converted_comments.get(submission.id, 0)
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢另一个答案,因为你没有解决这个令人惊讶的限制这一事实,因为通常python函数允许关键字参数.另一个答案解决了这个问题 (9认同)

小智 12

许多文档和教程,例如https://www.tutorialspoint.com/python/dictionary_get.htm,错误地将语法指定为

dict.get(key, default = None)

代替

dict.get(key, default)

  • `dict.get(key, default)` 也可能是一个不正确的签名,因为它显示了所需的第二个参数。 (7认同)