Python for循环无法按预期工作

Python for循环无法按预期工作,python,pyqt4,Python,Pyqt4,我没有收到任何错误消息,但是for循环不会产生与显式语句相同的结果。kp是一个类的实例,key0-9是该类的子元素。我想做的事真的应该起作用吗?如果是,那么问题可能在于PyQt4类是如何构造的 这项工作: def open_kp1(self, kp, le): self.inputStr = le.text() kp.key1.clicked.disconnect() kp.key2.clicked.disconnect() kp.key3.clicked.dis

我没有收到任何错误消息,但是for循环不会产生与显式语句相同的结果。kp是一个类的实例,key0-9是该类的子元素。我想做的事真的应该起作用吗?如果是,那么问题可能在于PyQt4类是如何构造的

这项工作:

def open_kp1(self, kp, le):
    self.inputStr = le.text()
    kp.key1.clicked.disconnect()
    kp.key2.clicked.disconnect()
    kp.key3.clicked.disconnect()
    kp.key4.clicked.disconnect()
    kp.key5.clicked.disconnect()
    kp.key6.clicked.disconnect()
    kp.key7.clicked.disconnect()
    kp.key8.clicked.disconnect()
    kp.key9.clicked.disconnect()
    kp.key0.clicked.disconnect()
    ... more code
这并不是:

def open_kp1(self, kp, le):
    self.inputStr = le.text()
    key_list = (kp.key1, kp.key2, kp.key3, kp.key4, kp.key5, kp.key6, kp.key7,
            kp.key8, kp.key9, kp.key0)
    for key in key_list:
        key.clicked.disconnect()
    ... more code

问题似乎在于,当您在for循环中调用disconnect函数时,列表可能会出现一些错误,具体取决于您在其中使用它的范围,或者在循环中运行该函数时受到一些限制

调试的一个好方法是首先运行此代码以查看代码实际给出错误的位置,这样您就可以在这里提供更多的输入供人们回答

def open_kp1(self, kp, le):
    self.inputStr = le.text()
    key_list = (kp.key1, kp.key2, kp.key3, kp.key4, kp.key5, kp.key6, kp.key7,kp.key8, kp.key9, kp.key0)
    print(key_list) # print the list to verify the list is indeed intact
    for key in key_list:
        print(key) # verify if something indeed is the problem with individual key or if the code ever enters the for loop.
        key.clicked.disconnect()
    ... more code
您需要验证的是,列表确实按照您的意愿存储了指针

另外,在旁注中,在调试模式下运行应用程序是一种很好的做法,以便在出现问题时获得详细的描述,并在此处上载跟踪


编辑:拼写

问题在于,当您在for循环中调用disconnect函数时,列表可能会出现一些错误,具体取决于您在其中使用它的范围或对在循环中运行函数的某些约束

调试的一个好方法是首先运行此代码以查看代码实际给出错误的位置,这样您就可以在这里提供更多的输入供人们回答

def open_kp1(self, kp, le):
    self.inputStr = le.text()
    key_list = (kp.key1, kp.key2, kp.key3, kp.key4, kp.key5, kp.key6, kp.key7,kp.key8, kp.key9, kp.key0)
    print(key_list) # print the list to verify the list is indeed intact
    for key in key_list:
        print(key) # verify if something indeed is the problem with individual key or if the code ever enters the for loop.
        key.clicked.disconnect()
    ... more code
您需要验证的是,列表确实按照您的意愿存储了指针

另外,在旁注中,在调试模式下运行应用程序是一种很好的做法,以便在出现问题时获得详细的描述,并在此处上载跟踪


编辑:拼写

除了使用元组而不是列表之外,我不确定是否看到了差异。好吧,这是一个差异:当断开连接触发的内容修改了kp.key?,第二个版本仍将使用旧引用。@dhke好吧,那将是一个可怕的设计:断开连接方法是在单击对象上的。不管怎样,如果不知道这些物体是什么,我们就无话可说了。但在99%的情况下都是一样的,OP遇到的问题是另一个问题,xy问题。你还没有真正解释什么不起作用,或者你预期会发生什么。大概,您正在做一些测试来检查它是否有效-那测试是什么?除了使用元组而不是列表之外,我不确定我是否看到了差异。嗯,有一个差异:当断开连接触发的某个事件修改了kp.key?时,第二个版本仍将使用旧引用。@dhke-Well,这将是一个可怕的设计:disconnect方法位于单击的对象上。不管怎样,如果不知道这些物体是什么,我们就无话可说了。但在99%的情况下都是一样的,OP遇到的问题是另一个问题,xy问题。你还没有真正解释什么不起作用,或者你预期会发生什么。想必,您正在做一些测试来检查它是否工作——那么,该测试是什么呢?