Python3:断言'iter_is_valid(iter,list_store)'失败 [英] Python3: assertion 'iter_is_valid (iter, list_store)' failed

查看:40
本文介绍了Python3:断言'iter_is_valid(iter,list_store)'失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很难从Python 2.7升级到Python 3.

I have a hard time upgrading from Python 2.7 to Python 3. Many many errors.

下面在Python 2.7中完美运行的代码给了我一个错误:

The code below that worked perfectly in Python 2.7 now gives me an error:

gtk_list_store_get_value: assertion 'iter_is_valid (iter, list_store)' failed
 Traceback (most recent call last):
  File "/home/gato/bin/ave.py", line 1586, in writing
    result = self.grepa(str(entry_text.encode('iso-8859-1')))
  File "/home/gato/bin/ave.py", line 1453, in grepa
    iterr = self.grep3(self.iniiterlist, regex)
  File "/home/gato/bin/ave.py", line 1442, in grep3
    flds = flds+self.database[self.activelist_iters[iterr][0]][i]
  File "/usr/lib64/python3.8/site-packages/gi/overrides/Gtk.py", line 1129, in __getitem__
    return self.model.get_value(self.iter, key)
TypeError: unknown type (null)

我真的不明白Python 3向我要什么.要以某种方式声明 iter 类型?

I really don't understand what Python 3 wants from me. To somehow declare the iter type?

这是我代码的相关部分:

This is the relevant part of my code:

# Get iter of the first match beginning with iterr in current birdlist;
# assumes regex extends (1,2 or 3 fields)
def grep3(self, iterr, regex):
    # Usar los iters en self.activelist_iters
    while iterr:
        flds = ""
        for i in self.searchfields:
            #flds = flds+self.database.get_value(iterr, i)
            flds = flds+self.database[self.activelist_iters[iterr][0]][i]
        if re.search(regex, flds):
            return iterr
        iterr = self.activelist_iters.iter_next(iterr)
    return

# Get a list of iter of all matches in current birdlist;
# assumes regex extends (1,2 or 3 fields)
def grepa(self, regex):
    out = []
    regex = regex_repl(regex, True)
    iterr = self.grep3(self.iniiterlist, regex)
    while iterr:
        out.append(iterr)
        iterr = self.grep3(self.activelist_iters.iter_next(iterr), regex)

    return out

BTW, activelist_iters 是全局 gtk.ListStore(gtk.TreeIter)

推荐答案

此处:

在Python 3中,map返回一个迭代器,您只能迭代一次.如果您第二次迭代迭代器,它将立即引发StopIteration,就好像它是空的一样.max消耗整个对象,而min则将迭代器视为空.如果需要多次使用元素,则需要调用list以获得列表,而不是迭代器.

我的程序是为Python 2构建的,我使用了 iters 列表来引用在Python 3中消失的元素.

My program was built for Python 2, and I used a list of iters to refer to elements, that vanished in Python 3.

我仍然不明白为什么Python 3会以多种方式破坏Python 2.Python 3没有遵循最基本的向后兼容原则.也许有人可以向我解释...

I still don't understand why Python 3 broke Python 2 in so many ways. Python 3 did not obey the most basic backward compatibility principles. Maybe someone here can explain me...

这篇关于Python3:断言'iter_is_valid(iter,list_store)'失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆