0

私はこれに完全に困惑しています:

私は次のPythonコードを持っています:

def remove(self, widgets):
    for widget in widgets:
        widget_found = False
        for widget_sig in self.widgets:
            if widget_sig.id == widget:
                #remove all objects from selected widget
                widget_found = True
                to_remove = widget_sig.objs
                for obj in to_remove:
                    #objs are all intances of oo_canvas classes
                    obj.destroy()
                    self._build(widget, obj)
        if not widget_found:
            #if we iterated through the entire list and still couldn't find anything
            raise mockingbird_errs.InternalMockingbirdError("The requested widget was not registered with this builder: "+str(widget))

これはかなり簡単なはずです。重要なのは、to_removeを正しく繰り返すことは決してないということです。何らかの理由で、他のすべての要素をスキップします。さらに厄介なのは、forループの前後にto_removeの長さを出力させると、254と127が出力されるということです。私の知る限り、リストを反復処理することは、他のすべての要素を削除することを含みません。

私は簡単な何かが欠けていますか?一体何が起こっているのですか?

4

1 に答える 1

5

...他のすべての要素をスキップします。

これは、それらを削除し続け、リストを 1 つ短くするためです。そして、次のインデックスに移動します。逆方向に作業するか、リストのコピーを反復処理します。

于 2012-12-18T06:04:31.740 に答える