每当我尝试运行应用程序时,都会出现“ RuntimeError:生成器引发StopIteration”

时间:2018-08-06 05:19:18

标签: python web runtime-error helper stopiteration

我正在尝试运行以下代码:

import web

urls = (
    '/', 'index'
)

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

但是每次都会给我这个错误

C:\Users\aidke\Desktop>python app.py
Traceback (most recent call last):
  File "C:\Users\aidke\AppData\Local\Programs\Python\Python37-32\lib\site-packages\web\utils.py", line 526, in take
    yield next(seq)
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "app.py", line 14, in <module>
    app = web.application(urls, globals())
  File "C:\Users\aidke\AppData\Local\Programs\Python\Python37-32\lib\site-packages\web\application.py", line 62, in __init__
    self.init_mapping(mapping)
  File "C:\Users\aidke\AppData\Local\Programs\Python\Python37-32\lib\site-packages\web\application.py", line 130, in init_mapping
    self.mapping = list(utils.group(mapping, 2))
  File "C:\Users\aidke\AppData\Local\Programs\Python\Python37-32\lib\site-packages\web\utils.py", line 531, in group
    x = list(take(seq, size))
RuntimeError: generator raised StopIteration

我尝试了别人的代码,却发生了完全相同的事情。另外,我尝试重新安装web.py(实验性),但仍然无法正常工作。

6 个答案:

答案 0 :(得分:23)

要从文件路径进行判断,似乎您正在运行Python 3.7。如果是这样,您就会被3.7版新行为described here所吸引:

  

PEP 479已为Python 3.7中的所有代码启用,这意味着在协程和生成器中直接或间接引发的StopIteration异常将转换为RuntimeError异常。 (由Yury Selivanov在bpo-32670中贡献。)

在进行此更改之前,由生成器引起或通过的StopIteration只是终止了生成器的使用寿命(默默地吞噬了该异常)。您正在使用的模块必须按照3.7的预期进行重新编码。

有机会需要更改:

yield next(seq)

收件人:

try:
    yield next(seq)
except StopIteration:
    return

答案 1 :(得分:3)

我的解决方案是升级这些点

mongoengine0.14.00.19.1

flask-mongoengine0.9.5

有效。

答案 2 :(得分:1)

他们已解决此问题,只需卸载您当前的web.py版本,然后从pip install web.py运行windows 10时出现错误。因此,我运行pip install -e git+https://github.com/webpy/webpy.git#egg=webpy命令从master分支获取最新版本。如所述,这不会执行RuntimeError: generator raised StopIteration错误。

答案 3 :(得分:0)

此问题应在#577中解决: https://github.com/webpy/webpy/pull/577

答案 4 :(得分:0)

大多数主要软件包现在已经解决了这个问题,但一个主要软件包还没有解决 clips/pattern project。它自 2018 年 8 月以来一直未更新,因此从未收到修复。

由于这是“python 模式停止迭代”的最高 Google 搜索结果,这里有一个解决方法:

def pattern_stopiteration_workaround():
    try:
        print(lexeme('gave'))
    except:
        pass

def main():
    pattern_stopiteration_workaround()
    #Add your other code here

基本上,与模式相关的代码只会在您第一次运行时失败,因此您首先需要运行一次并捕获它抛出的异常。

它对我自己的脚本来说已经足够好了,但我不知道它是否能解决所有可能的问题。

不过,理想情况下,应该有人分叉剪辑/模式项目,因为它不再维护。

答案 5 :(得分:-1)

因此,在最近一次关于Python的自学过程中,一门课程要求我安装Web.py,但出现此错误,并且作为答案之一,它必须进行更新以与Python 3.7兼容。

我用pip3 install web.py==0.40-dev1安装软件包时遇到了此错误,并开始在网上寻找解决方案。

我所做的是通过webpy git搜索并找到https://github.com/webpy/webpy/tree/master/web中更新的 utils.py 文件,下载了该文件,并用它替换了我的文件Lib / site-packages / web文件夹(我是Windows用户),它可以正常工作。

希望这对某人有所帮助。