Python3:断言'iter_is_valid(iter,list_store)'失败 [英] Python3: assertion 'iter_is_valid (iter, list_store)' failed
问题描述
我很难从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屋!