【问题标题】:Python3: assertion 'iter_is_valid (iter, list_store)' failedPython3:断言'iter_is_valid(iter,list_store)'失败
【发布时间】:2020-05-25 21:51:08
【问题描述】:

我很难从 Python 2.7 升级到 Python 3。很多错误。

下面在 Python 2.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)

我真的不明白 Python 3 想要我做什么。以某种方式声明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)

【问题讨论】:

    标签: python-3.x loops


    【解决方案1】:

    我的问题得到了回答here:

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

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

    我仍然不明白为什么 Python 3 在很多方面都破坏了 Python 2。 Python 3 没有遵循最基本的向后兼容原则。也许这里有人可以解释我...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-27
      • 2021-03-16
      • 2010-09-26
      • 2018-11-09
      • 2021-01-20
      • 2014-06-10
      • 2014-02-10
      相关资源
      最近更新 更多