我正在尝试运行以下代码:
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(实验性),但仍然无法正常工作。
答案 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)
我的解决方案是升级这些点
mongoengine
从0.14.0
到0.19.1
和
flask-mongoengine
至0.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用户),它可以正常工作。
希望这对某人有所帮助。