我很难从Python2.7升级到Python3,有很多错误。
下面的代码在Python2.7中工作得很好,现在给我一个错误:
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)我真的不明白Python3想从我这里得到什么。以某种方式声明iter类型?
这是我的代码的相关部分:
# 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顺便说一句,activelist_iters是一个全局gtk.ListStore(gtk.TreeIter)
发布于 2020-06-10 22:19:36
我的问题得到了回答,here
在Python3中,map返回一个迭代器,您只能迭代一次。如果您再次迭代迭代器,它将立即引发StopIteration,就好像它是空的一样。max消耗了整个东西,min认为迭代器是空的。如果需要多次使用元素,则需要调用list来获取列表,而不是迭代器。
我的程序是为Python2构建的,我使用了一个iters列表来引用在Python3中消失的元素。
我仍然不明白为什么Python3在这么多方面打破了Python2。Python3没有遵守最基本的向后兼容原则。也许这里有人能解释我..。
https://stackoverflow.com/questions/62011325
复制相似问题