zoukankan      html  css  js  c++  java
  • python

    最佳答案

    for循环监听 StopIteration明确地。
    for的目的语句用于循环迭代器提供的序列,异常用于表示迭代器现在已完成; for不会捕获被迭代对象引发的其他异常,只有那个异常。

    那是因为 StopIteration是正常的、预期的信号,告诉正在迭代的人没有什么可产生的了。

    生成器函数是一种特殊的迭代器;它确实引发了StopIteration当函数完成时(即当它返回时,是的, return None 引发 StopIteration )。这是迭代器的要求;他们必须筹集StopIteration当他们完成时;事实上,曾经是StopIteration已引发,尝试从它们获取另一个元素(通过 next() ,或调用迭代器上的 .next() (py 2) 或 .__next__() (py 3) 方法)必须始终引发 StopIteration再次。
    GeneratorExit在另一个方向上进行通信是一个异常(exception)。您正在使用 yield 显式关闭生成器表达式,以及 Python 将闭包传达给生成器的方式是通过引发 GeneratorExit在那个函数里面。您在 countdown 中明确捕获该异常,其目的是让生成器在关闭时根据需要清理资源。

    一个 GeneratorExit不会传播给调用者;见 generator.close() documentation .

    关于python - 为什么 next 会引发 'StopIteration' ,但 'for' 会正常返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14413969/

  • 相关阅读:
    浅谈分层图最短路问题
    [Luogu P2574]XOR的艺术
    luogu P2419 [USACO08JAN]牛大赛Cow Contest
    luogu P1119 灾后重建
    [国家集训队]跳跳棋
    洛谷P4147 玉蟾宫
    [ZJOI2007]棋盘制作
    树状数组模版
    Nearest Common Ancestor
    P1260 工程规划
  • 原文地址:https://www.cnblogs.com/shamoguzhou/p/15427091.html
Copyright © 2011-2022 走看看