Skip to main content
 首页 » 编程设计

Python:TypeError:lambda>() 采用 0 个位置参数,但由于断言给出了 1 个

2025年05月04日14小虾米

我是进行单元测试的新手。我目前正在运行 pytest。我有这个 Program.py 正在运行,但是当我在我的 Program_test.py 上运行 pytest 时,由于我在下面的代码中有断言行的这些类型错误,我一直没有通过测试。我有程序要求用户输入值或输入退出程序。我的 Program_test.py 程序中已经包含了“导入 pytest”。

我是否使用了 lambda 错误?我不确定如何最好地解决这个问题并让这些用户输入起作用。这只是测试用户的 get_weight 函数。

***它已经修复了。我在使用 lambda 时遇到了问题,下面的内容非常有帮助

请您参考如下方法:

这里有一个例子来说明你在哪里出错,为了解释的目的,我将 lambdas 分配给变量:

zero_arg_lambda = lambda: "131"  # Takes no args 
one_arg_lambda = lambda x: "131"  # Takes one arg 

使用 arg 调用 zero_arg_lambda(与您的错误相同):

zero_arg_lambda(1) 
>>> Traceback (most recent call last): 
>>> File "<input>", line 1, in <module> 
>>> TypeError: <lambda>() takes no arguments (1 given) 

调用 one_arg_lambda :

one_arg_lambda(1) 
>>> "131" 

所以简而言之,您的代码正在将一个参数传递给 lambda,即使您已指定它不需要一个参数。

one_arg_lambda 示例接受一个参数并简单地返回冒号右侧的值。 我建议阅读 lambda 上的文档

或者,如果您不看那里,预期的 lambda 格式是:

lambda parameters: expression

另请注意 monkeypatch.context.setattr 上的文档其中有一个使用 lambda 表达式的好例子。

要查明代码中的错误来自测试中的 context.setattr 调用。

def test_get_weight_returns_valid_input(monkeypatch): 
    with monkeypatch.context() as context: 
        # Old line causing error: context.setattr('builtins.input', lambda: "131") 
        context.setattr('builtins.input', lambda x: "131")  # Fixed