TypeError:Method只需要2个参数(给定3个)

时间:2014-03-16 12:47:29

标签: python pyudev

尝试使用pyudev制作程序来监控USB驱动器连接。这是代码:

def __init__(self):
    self.window = gtk.Window()
    self.window.set_default_size(300, 300)

    self.vbox= gtk.VBox(False, 5)
    label = gtk.Label("Please plug the device")

    context = Context()
    monitor = Monitor.from_netlink(context)
    monitor.filter_by(subsystem='block',device_type='disk')
    observer = GUDevMonitorObserver(monitor)
    observer.connect("device-added",self.device_connected)
    monitor.start()

    self.vbox.pack_start(label)
    self.window.add(self.vbox)

    self.window.show_all()

def device_connected(self, device):
    self.window.remove(self.vbox)
    label = gtk.Label('{0!r} added'.format(device))
    self.vbox.pack_end(label)
    self.window.add(self.vbox)

追溯:

vineet@vineet:~/Documents/Project$ python project.py
TypeError: device_connected() takes exactly 2 arguments (3 given)
TypeError: device_connected() takes exactly 2 arguments (3 given)

请帮我纠正这个问题。

我正在尝试使用docs页面上提供的代码段。正如您将注意到的,device_connected方法具有参数 - device_connected(observer,device),但代码在这种情况下也不起作用。它返回抛出相同的错误。但我想知道它是如何起作用的。一个班级的每个方法都不应该以{{1​​}}作为参数吗?

1 个答案:

答案 0 :(得分:0)

文档并没有说这些是类的方法,而是由该类发送的信号。 (实际上,文档使用的名称是“device-added”,它甚至不是Python中的有效函数名。)

该函数应该是独立函数,您可以将其注册为该信号的侦听器。您可以在页面顶部的代码段中看到如何将信号连接到观察者的示例。

相关问题