首页 > 解决方案 > 每次我尝试运行应用程序时都会出现“RuntimeError:生成器引发 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(experimental),但仍然无法正常工作。

标签: pythonpython-3.xruntime-errorpython-3.7stopiteration

解决方案


从文件路径判断,看起来您正在运行 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

推荐阅读