我在这里有这个函数调用:
import test_hosts
test_hosts.LocalTestHost(mst, port, local_ip, remote_if_mac, remote_if_ip, service_port)
当我运行它时,解释器失败,并说我将6个参数传递给一个接收7个参数的函数。
LocalTestHost
是一个类,其构造函数采用self
参数和其他六个参数:总共产生7个参数。这是它的声明:
class LocalTestHost:
def __init__(self, mst, port, local_ip, remote_if_mac, remote_if_ip, service_port):
...
我已经盯着这段代码好几个小时了,我找不到问题了。当我按原样运行时,它会失败,因为我传递了6个参数,这太少了,如果我用一个附加参数调用构造函数只是为了看到我仍然可以计数,它说我传递了8个参数,这也是许多。
答案 0 :(得分:3)
您粘贴的代码片段看起来不错。正如其他人正确地说的那样,为了找到问题,你应该找到仍然存在错误的最少量的代码。
我的建议是
(1)检查是否为您的Python版本编写了模块test_hosts
,并且确实是要导入的文件
(2)将class LocalTestHost: def __init__(...
函数复制到您的文件中并尝试从那里调用它。如果你得到了#sn params,它会引发像NameError这样的东西。
(3)如果上述功能适合您,请使用运行时内省检查test_hosts.LocalTestHost.__init__()
签名。有人可能正在改变它,例如__init__ = staticmethod(__init__)
某处(一种定义静态函数的旧方法)。
请告诉我们它是怎么回事!
答案 1 :(得分:2)
另一个想法是:你无意中调用了旧版本的代码。确保你的某处没有.pyc文件。
答案 2 :(得分:1)
我以前见过这些问题,但这是因为前面的代码是以语法正确的方式制作的,但并不是我想要的。
此代码段不足以为我重现问题,至少在OS X上没有2.5.1。
答案 3 :(得分:1)
我的天哪,我是个白痴。我需要更彻底地阅读错误消息。
实际上导致问题的代码实际上并不存在。它是构造函数中的几行。这是:
class LocalTestHost:
def __init__(self, mst, port, local_ip, remote_if_mac, remote_if_ip, service_port):
.
. <some initialization code>
.
# This is the faulty line
self.__host_operations = HostOperationsFactory().create(
local_ip, port, mst, remote_if_ip)
这是错误信息,我一直没有阅读,愚蠢地没有发布我的问题:
>>> test_hosts.LocalTestHost(1,2,3,4,5,6)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "test_hosts.py", line 709, in __init__
self.__host_operations = HostOperationsFactory().create(
File "test_hosts.py", line 339, in create
remote_ip)
File "test_hosts.py", line 110, in __init__
packet_size, remote_ip)
TypeError: __init__() takes exactly 7 arguments (6 given)
我稍微重构了我的代码,并为几个方法和构造函数添加了参数,但我忘了在几个地方更新它们的用法。这个create
函数实际上返回它实例化的另一个对象,它的构造函数(顺便提一下,与我选择的构造函数具有相同的参数)没有收到它应该具有的所有参数。
我没有彻底阅读该消息,我的困惑来自最后一行,说明我已经通过了构造函数太少的参数。现在,我还尝试添加太多参数作为完整性检查,实际上它是我正在挑选的构造函数。我很惊讶我没有看到在这种情况下错误跟踪显着缩短。
我今天学到了宝贵的一课。问题是我认为我已经好几次倾斜了几年。