当前位置: 首页 > 面试题库 >

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

羊舌青青
2023-03-14
问题内容

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

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


问题答案:

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

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

在此更改之前,StopIteration由发电机举起或经过发电机只是简单地终止了发电机的使用寿命(默默地吞没了例外)。您正在使用的模块将必须重新编码才能按照3.7的预期工作。

他们可能需要更改:

yield next(seq)

至:

try:
    yield next(seq)
except StopIteration:
    return


 类似资料: