python - 如何避免 python 中的 StopIteration 错误

标签 python iteration stopiteration

我有一行从多个列表中提取变量,我希望它避免出现 StopIteration 错误,以便它可以移到下一行。目前我正在使用 break 函数,这避免了 StopIteration,但只给我列表中的第一项,如果我要打印它,它会在它后面留下一个空行。

这里有两个我的迭代有同样的问题。

def compose_line5(self, synset_offset, pointer_list):
    self.line5 = ''''''
    for item in pointer_list:
        self.line5 += '''http://www.example.org/lexicon#'''+synset_offset+''' http://www.monnetproject.eu/lemon#has_ptr '''+pointer_list.next()+'''\n'''            
        break
    return self.line5

def compose_line6(self, pointer_list, synset_list): 
    self.line6 = ''''''
    for item in synset_list:
        self.line6 += '''http://www.example.org/lexicon#'''+pointer_list.next()+''' http://www.monnetproject.eu/lemon#pos '''+synset_list.next()+'''\n'''                      
        break
    return self.line6

这是我在没有中断的情况下得到的错误:

Traceback (most recent call last):
  File "wordnet.py", line 225, in <module>
    wordnet.line_for_loop(my_file)
  File "wordnet.py", line 62, in line_for_loop
    self.compose_line5(self.synset_offset, self.pointer_list)
  File "wordnet.py", line 186, in compose_line5
    self.line5 += '''http://www.example.org/lexicon#'''+self.synset_offset+''' http://www.monnetproject.eu/lemon#has_ptr '''+self.pointer_list.next()+'''\n'''
StopIteration

是否有快速修复方法,或者我是否必须为我在其中使用 iter() 的每个方法捕获异常?

最佳答案

compose_line5 中,使用 item 而不是 pointer_list.next() - 您已经在遍历 pointer_list.

对于 compose_line6,您似乎想同时遍历两个列表。使用来自 Is there a better way to iterate over two lists, getting one element from each list for each iteration? 的最佳答案 (我假设两个列表的长度相同)

是的,如果您手动调用 .next(),迭代器协议(protocol)将引发 StopIteration(不是错误,只是表示迭代结束的异常) .使用它的 Pythonic 方式是将它用作普通迭代器(例如,循环遍历它)而不是对其调用 .next()

除了您可能想要查看的问题之外,您的代码还有一些问题 - 查看 http://www.python.org/dev/peps/pep-0008/

例如,当 '' 足够时,无需使用 ''''''。您可能不想执行 +=,而是创建一个列表,然后在最后加入。如果您只是从函数中返回它们,不确定为什么要将它们存储在 self 中。

关于python - 如何避免 python 中的 StopIteration 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17317900/

相关文章:

python - 在 "AppData\Roaming"目录中创建文件夹 [Python]

python - 无法获取 HTTPS URL(请求包)

c++ - 分部分读取文件,在最后读取的部分之后继续

Haskell,如何在函数中打印值和返回

python - 如何让 Python 生成器返回 None 而不是 StopIteration?

python - 以概率向数组添加元素

Python自动备忘

python - 想想 Python : Chapter 12 Exercise 6

使用 list(map(...)) 时无法引发 Python3 StopIteration 错误

Python:StopIteration 异常和列表理解