"RuntimeError: generator raised StopIteration" every time I try to run app

"RuntimeError: generator raised StopIteration" every time I try to run app

我正在尝试 运行 此代码:

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(实验性),但仍然无效。

从文件路径判断,你好像是运行Python3.7。如果是这样,您将被 new-in-3.7 behavior:

抓到

PEP 479 is enabled for all code in Python 3.7, meaning that StopIteration exceptions raised directly or indirectly in coroutines and generators are transformed into RuntimeError exceptions. (Contributed by Yury Selivanov in bpo-32670.)

在此更改之前,由生成器引发或通过生成器的 StopIteration 只是结束了生成器的使用寿命(异常被默默吞下)。您正在使用的模块必须重新编码才能在 3.7 中按预期工作。

他们可能需要改变:

yield next(seq)

至:

try:
    yield next(seq)
except StopIteration:
    return

所以在我最近的 self-learning 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 用户)并且它刚刚工作。

希望这对某人有所帮助。

他们解决了这个问题,只需卸载您当前的 web.py 版本,我在从 windows 10 中 运行 宁 pip install web.py 时遇到错误。所以我 运行 pip install -e git+https://github.com/webpy/webpy.git#egg=webpy 命令从 master 分支获取最新版本。这不会像提到的问题那样执行 RuntimeError: generator raised StopIteration 错误。

这应该在 #577 中修复: https://github.com/webpy/webpy/pull/577

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

mongoengine0.14.00.19.1

flask-mongoengine0.9.5

成功了。

大多数主要软件包现在已经修复了这个问题,但是 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

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

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

理想情况下,有人应该 fork clips/pattern 项目,因为它不再维护。

我在执行以下命令时遇到了同样的问题

python setup.py test

升级pytest版本出错

pip uninstall pytest
pip install pytest