"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 (экспериментальный), но он все еще не работал.
Ответы
Ответ 1
Судя по путям файлов, похоже, что вы используете Python 3.7. Если это так, вы попадаете в поведение, описанное здесь:
PEP 479 включен для всего кода в Python 3.7, что означает, что исключения StopIteration, возникающие прямо или косвенно в сопрограммах и генераторах, преобразуются в исключения RuntimeError. (Внесен Юрий Селиванов в bpo-32670.)
Перед этим изменением, StopIteration
возникший или проходящий через генератор, просто закончил срок службы генератора (исключение было проглочено). Модуль, который вы используете, должен быть перекодирован для работы в соответствии с 3.7.
Скорее всего, они должны измениться:
yield next(seq)
чтобы:
try:
yield next(seq)
except StopIteration:
return
Ответ 2
Поэтому во время моего недавнего самообучения на Python курс потребовал, чтобы я установил Web.py, и я получил эту ошибку, и, как указано в одном из ответов, она должна была быть обновлена, чтобы быть совместимой с Python 3.7.
Я установил пакет с помощью pip3 install web.py==0.40-dev1
столкнулся с этой ошибкой и начал поиск решения в сети.
Я сделал поиск по webpy git и нашел файл utils.py, который был более свежим в https://github.com/webpy/webpy/tree/master/web, скачал его и использовал для замены того, который был в моей папке Lib/site-packages/web (я пользователь Windows), и это просто работает.
Надеюсь, это поможет кому-то.