【问题标题】:How to avoid StopIteration Error in python如何避免python中的StopIteration错误
【发布时间】:2013-06-23 11:08:18
【问题描述】:

我有一行从多个列表中提取变量,我希望它避免出现 StopIteration 错误,以便它可以移动到下一行。目前我正在使用中断功能,这避免了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() 的每个方法捕获异常?

【问题讨论】:

  • 你为什么要调用 self.pointer_list.next() 并传入一个指针列表?
  • 对不起,错字!!反正没什么区别!
  • 这里不需要三引号;您不包括换行符,并且引用过于冗长。更好的是,使用字符串格式:'http://www.example.org/lexicon#{} http://www.monnetproject.eu/lemon#has_ptr{}\n'.format(synset_offset, pointer_list.next()).
  • 每行必须有两个空格,我将它们转换为三重格式,它不接受任何完整的行,我可以在该格式中留空格吗?

标签: python iteration stopiteration


【解决方案1】:

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(),迭代器协议将引发 StopIteration(不是错误,只是表示迭代结束的异常)。使用它的 Pythonic 方式是将其用作普通迭代器(例如,循环遍历它)而不是在其上调用 .next()

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 2020-08-22
    • 2019-04-11
    • 2019-01-02
    • 2019-10-17
    • 2019-12-18
    • 2016-08-05
    相关资源
    最近更新 更多