73

我正在尝试运行此代码:

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(experimental),但仍然无法正常工作。

4

7 回答 7

122

从文件路径判断,看起来您正在运行 Python 3.7。如果是这样,您将被新的 3.7 行为所吸引:

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

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

他们可能需要改变:

yield next(seq)

至:

try:
    yield next(seq)
except StopIteration:
    return
于 2018-08-06T05:29:29.247 回答
3

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

mongoengine0.14.00.19.1

flask-mongoengine0.9.5

有效。

于 2020-02-09T15:02:23.690 回答
3

因此,在我最近自学 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 用户),它刚刚工作。

希望这对某人有所帮助。

于 2019-07-15T01:13:42.383 回答
2

到目前为止,大多数主要软件包都已解决此问题,但尚未解决的主要软件包是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

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

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

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

于 2021-05-15T08:59:35.307 回答
1

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

于 2019-08-04T05:59:11.217 回答
0

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

于 2019-11-19T04:56:04.000 回答
0

我在下面的命令中遇到了同样的问题

python setup.py test

升级pytest版本时错误解决

pip uninstall pytest
pip install pytest
于 2022-01-03T10:16:12.323 回答