问题标签 [stopiteration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5557 浏览

python - Python:StopIteration 异常和列表推导

我想从 csv 文件中读取最多 20 行:

如果文件有 20 行或更多行,则工作正常,否则会因 StopIteration 异常而失败。

是否有一种优雅的方法来处理可能在列表理解中引发 StopIteration 异常的迭代器,或者我应该使用常规的 for 循环?

0 投票
3 回答
38663 浏览

python - python在一个循环中产生和停止迭代?

我有一个生成器,我想在其中为实际内容添加一个初始值和最终值,它是这样的:

当然,上面的代码不起作用 - 我的问题是我希望这样当队列中没有任何东西时,我希望生成器吐出footerAND 提高StopIterator. 有任何想法吗?

干杯,

0 投票
4 回答
4092 浏览

python - 从迭代器外部将 StopIteration 发送到 for 循环

有几种方法可以打破几个嵌套循环

他们是:

1)使用break-continue

2)使用返回

3)使用特殊异常

我有一些想法,可能有其他方法可以做到这一点。它是通过使用 StopIteration 将异常直接发送到外循环。我写了这段代码

不幸的是,StopIteration 没有被任何 for 循环捕获,并且该代码产生了丑陋的 Traceback。我认为这是因为 StopIteration 不是从 iterator it内部发送的。(这是我的猜测,我不确定)。

有什么方法可以将 StopIteration 发送到外循环?

谢谢!

0 投票
2 回答
37523 浏览

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

我正在使用生成器在列表中执行搜索,例如这个简单的示例:

(只是为了举例说明,与上面的列表相比,我使用的列表要长得多,并且条目比 . 稍微复杂一些int。我这样做是为了每次我都不会遍历整个列表搜索他们)

现在,如果我改为将其更改为i == 666,它将返回 a StopIteration,因为它在 . 中找不到任何666条目a

我怎样才能让它返回None呢?我当然可以将它包装在一个try ... except子句中,但是有没有更 Pythonic 的方式来做到这一点?

0 投票
4 回答
8261 浏览

python - 从迭代器返回,然后抛出 StopIteration

当迭代器耗尽时,最后一次从迭代器返回一些东西的好方法是什么。我正在使用一个标志,但这很丑陋:

背景:我从外部来源获取未知数量的字符串并将它们进一步发送给调用者。当这个过程结束时,我想发出一个字符串“x records processed”。我无法控制调用代码,所以这必须在我的迭代器中完成。

0 投票
1 回答
10567 浏览

python - 遍历列表并精美处理 Python 中的 StopIteration

我正在尝试遍历列表,并且仅当迭代到达列表末尾时才需要执行特定操作,请参见下面的示例:

我相信这段代码不是太 Pythonic,所以我正在寻找更好的方法。我认为理想的代码应该如下所示:

欢迎任何想法。

0 投票
2 回答
6584 浏览

python - 忽略停止迭代

我刚刚阅读了一堆关于如何在 Python 中处理 StopIteration 错误的帖子,但是我在解决我的特定示例时遇到了麻烦。基本上,我有一个带有很多前缀的 csv 文件。此文件有两列带标题:字数和计数。计数是该前缀出现的频率。我还有另一个包含公司名称列表的文件。前缀文件从公司文件中每个公司名称的第一个单词中获取前缀。我正在尝试删除重复项,而我现在想要做的是:

每次发生此错误时忽略 StopIteration 错误。

换句话说,我不必在下面写下所有注释掉的“if”语句,我只想要一行说:如果生成了 StopIteration 错误,只需通过将有问题的“前缀”视为某种方式来忽略该错误,就好像它是前缀文件中出现两次以上的前缀,因此我们应该返回不包含前缀的公司名称的值。我意识到这忽略了前缀文件中存在不同的前缀值和公司名称的实际前缀这一事实,但通常它与 python 和 excel 之间存储的非美式英文字母以及其他一些看起来不是特别系统的方式,所以我稍后会手动删除它们。

我的代码是:

0 投票
3 回答
35103 浏览

python - raise StopIteration 和生成器中的 return 语句有什么区别?

我很好奇生成器中使用raise StopIterationreturn语句之间的区别。

例如,这两个功能之间有什么区别吗?

我猜测更“pythonic”的方式是第二种方式(如果我错了,请纠正我),但据我所知,两种方式都会引发StopIteration异常。

0 投票
1 回答
124172 浏览

python - 为什么 next 会引发“StopIteration”,但“for”会正常返回?

在这段代码中,为什么 using 会for导致 noStopIteration 或者for循环捕获所有异常然后静默退出?在这种情况下,为什么我们有多余的return?? 或者是由以下 raise StopIteration原因引起的:return None

假设StopIteration被触发:return None。什么时候GeneratorExit生成?

如果我手动执行:

在这种情况下,为什么我看不到回溯?

0 投票
5 回答
67885 浏览

python - yield 如何捕获 StopIteration 异常?

为什么在示例函数中终止:

但是如果我取消yield语句函数会引发StopIteration异常吗?

编辑:很抱歉误导了你们。我知道生成器是什么以及如何使用它们。当然,当我说函数终止时,我并不是指急切地评估函数。我只是暗示当我使用函数生成生成器时:

func的情况下,它可以工作并返回相同的生成器,但在 func2 的情况下:

它引发 StopIteration 而不是None返回或无限循环。

让我更具体一点。在itertools中有一个函数tee相当于:

事实上,有一些魔法,因为嵌套函数gen有无限循环,没有 break 语句。gen函数在没有项目时由于StopIteration异常而终止。但它正确终止(不引发异常),即只是停止循环。所以问题是StopIteration在哪里处理?