TypeError:f()至少需要1个参数(给定1个) - 这是python中的错误吗?

时间:2015-04-15 17:22:44

标签: python python-2.7

使用python 2.7.6 64位我输入:

>>> def f(a, b=5):
...    pass
...
>>> f(b=3)

然后我得到:

TypeError: f() takes at least 1 argument (1 given)

当然我应该收到一些错误,因为我还没有为参数a分配值。但是我得到的错误信息并不意味着什么(1至少为1)。

这是一个错误,对吗?它固定了吗?我无法找到任何相关信息。

谢谢!

3 个答案:

答案 0 :(得分:4)

不,这不是一个错误。

要显示此信息,您只需使用a值运行该功能:

def f(a, b=5):
    print b

a=1
f(a)

输出:

>>> 
5

正如您所看到的,该程序打印出b的值为5.您甚至不必将b传递给函数,因为它已由函数定义本身。

如果您像往常一样通过f(b=3),则会收到一条错误,要求您输入a变量,因为尚未定义任何地方。

TypeError: f() takes at least 1 argument (1 given) #You've given 1 value (b=3), but 1 argument ("a" value) is still needed

这就是为什么你跑:

>>> f(a=3)
5

您不会收到任何错误,因为a值已成功传递到函数中。


修改

进一步分解:

  • ab是参数

当它显示f() takes at least 1 argument时,表示函数f() 只能使用一个传递给它的参数。但是,单个参数必须 a

你做的是将b=3传递给它。 b 也是一个参数(这就是为什么它在你的错误中说(1 given)),但它不是"必需的"论点。

答案 1 :(得分:1)

至少需要1个参数,因为你可以省略b并输入1个参数,消息错误不是很有帮助,但也没有错。

答案 2 :(得分:0)

你可以这样想:

句子的第一部分是计算方法签名中没有默认值的参数数量(因此,必需的参数)。

句子的第二部分是计算实际传递给方法的参数总数,无论它们是否被指定为关键字,位置,或者方法签名是否具有默认值。

这不是一个非常有用的错误消息,但从技术上讲它也不是错误的。正如其他人所说,Python 3版本更好一点,因为它明确指出缺少位置参数。