Joh*_*erz 9 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
Run Code Online (Sandbox Code Playgroud)
这是我没有休息时得到的错误:
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
Run Code Online (Sandbox Code Playgroud)
有没有快速解决这个问题,或者我必须捕获我使用iter()的每个方法的异常?
在compose_line5, 而不是pointer_list.next(), use item- 你已经在迭代了pointer_list。
对于compose_line6,您似乎想同时遍历两个列表。使用来自是否有更好的方法迭代两个列表的最佳答案,每次迭代从每个列表中获取一个元素?
(我假设两个列表的长度相同)
是的,StopIteration如果您.next()手动调用它,迭代器协议将引发(不是错误,只是一个异常信号迭代结束)。使用它的 Pythonic 方法是将它用作普通迭代器(例如,循环遍历它)而不是调用.next()它。
您的代码还有一些您可能想要查看的问题 - 查看http://www.python.org/dev/peps/pep-0008/
例如,足够''''''时不需要使用''。+=您可能想要创建一个列表,然后最后加入,而不是这样做。如果您只是从函数中返回它们,则不确定为什么要将它们存储在 self 中。
| 归档时间: |
|
| 查看次数: |
35937 次 |
| 最近记录: |