web-dev-qa-db-fra.com

"RuntimeError: le générateur a soulevé StopIteration" à chaque fois que j'essaie d'exécuter l'application

J'essaie d'exécuter ce code:

import web

urls = (
    '/', 'index'
)

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

Mais ça me donne cette erreur à chaque fois

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

J'ai essayé le code de quelqu'un d'autre et la même chose s'est produite exactement. De plus, j'ai essayé de réinstaller web.py (expérimental) mais cela ne fonctionnait toujours pas.

25
no4syn

À en juger par les chemins de fichiers, il semble que vous exécutiez Python 3.7. Si tel est le cas, vous vous retrouvez pris par le comportement new-in-3.7 décrit ici :

PEP 479 est activé pour tout le code dans Python 3.7, ce qui signifie que les exceptions StopIteration levées directement ou indirectement dans les coroutines et les générateurs sont transformées en exceptions RuntimeError. (Contribution de Yury Selivanov dans bpo-32670.)

Avant ce changement, un StopIteration élevé ou traversant un générateur mettait simplement fin à sa vie utile (l'exception a été avalée silencieusement). Le module que vous utilisez devra être recodé pour fonctionner comme prévu avec la version 3.7.

Il y a des chances qu'ils aient besoin de changer:

yield next(seq)

à:

try:
    yield next(seq)
except StopIteration:
    return
38
Tim Peters

Ainsi, lors de ma récente formation à l'autoapprentissage sur Python, un cours m'a demandé d'installer Web.py. Cette erreur s'est produite et, comme le dit l'une des réponses, il a dû être mis à jour pour être compatible avec Python 3.7.

J'ai installé le paquet avec pip3 install web.py==0.40-dev1 Dans l'erreur et j'ai commencé à chercher sur le Web une solution.

Ce que j’ai fait, c’est fouiller dans Webpy git et trouver le fichier utils.py qui était plus récent dans https://github.com/ webpy/webpy/tree/master/web , l'a téléchargé et l'a utilisé pour remplacer celui qui se trouvait dans mon dossier Lib/site-packages/web (je suis un utilisateur Windows) et cela a fonctionné.

J'espère que cela aidera quelqu'un.

2
Leo Gomez

Ils ont résolu ce problème, il suffit de désinstaller votre version actuelle de web.py. Une erreur s'est produite lors de l'exécution de pip install web.py À partir de windows 10. Donc, je lance la commande pip install -e git+https://github.com/webpy/webpy.git#Egg=webpy Pour obtenir la dernière version de la branche master. Ceci n'exécutera pas l'erreur RuntimeError: generator raised StopIteration Comme question mentionnée.

0
Kushan Gunasekera