嵌入式Python:TypeError:code()只接受2个参数(给定1个)

嵌入式Python:TypeError:code()只接受2个参数(给定1个),python,self,Python,Self,我们的工具嵌入了python。我们定义了一个接受“两个”参数(但只有一个用户参数)的函数: 当他们实际使用一个参数调用函数时,一切正常: def code(self, device): return tools.code(self, device) code(device) 当用户在没有任何参数的情况下进行调用时,就会出现问题,例如: code() 现在,python解释器返回的错误消息是: TypeError: code() takes exactly 2 argumen

我们的工具嵌入了python。我们定义了一个接受“两个”参数(但只有一个用户参数)的函数:

当他们实际使用一个参数调用函数时,一切正常:

def code(self, device):
        return tools.code(self, device)
code(device)
当用户在没有任何参数的情况下进行调用时,就会出现问题,例如:

code()
现在,python解释器返回的错误消息是:

TypeError: code() takes exactly 2 arguments (1 given)

现在用户认为应该有两个参数,而实际上他们只需要提供一个参数-有没有办法改进此错误消息?

详细说明我的评论

如果调用该方法,self是隐式的。这算是一个论点。还有另一个名为device的参数。这是另一个参数,因此它需要两个参数。如果在某个时刻,除了隐式自变量之外,您不想接受任何参数,可以使用*args,如下所示:

def code(self, *args):
def code(self, device=''):
或者,您可以对参数使用默认值,如下所示:

def code(self, *args):
def code(self, device=''):

是的,函数的参数中有device=''吗?为什么会混淆?函数代码需要设备的参数。如果你只使用一个参数调用math.pow会让人困惑吗?最终用户会感到困惑,因为他们真的只需要提供一个参数,而不是两个参数。+1不知道为什么会被否决。隐含的自我——实际上是错误消息——让Python的新手感到困惑。错误消息使情况变得更糟,因为它应该是:
code()只接受2个参数(1个隐含参数,没有给定参数)。
参见[为什么显式self必须保留][1],Guido提到“我同意这令人困惑,但我宁愿修复此错误消息…”。[1] :如何更好地设置默认值?这将导致错误消息->静默错误。Var args一点也不好我没说更好。我不知道他们返回的意图是什么,我也不愿意做出假设,但在什么可能的情况下,沉默地忽略错误会更好?问题是如何改进错误消息,而不是将其隐藏起来。我想让用户清楚错误消息。用户不知道隐含的“自我”,当他们看到“需要两个参数”时,他们不知道额外的参数可能是什么。好吧,忽略我的帖子。“我们是否在代码中做错了什么?”让我觉得您不明白发生了什么,而不是问如何更改发送给用户的异常字符串。您可以捕获一个TypeError,检查它的值以确保它是由于参数不匹配而引发的,然后打印不同的内容。但是,我不建议这样做。对于这些异常感到困惑的用户,如果设计得当,就不应该看到那个部分。