73 votes

"RuntimeError: le générateur a déclenché 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 exactement la même chose s'est produite. De plus, j'ai essayé de réinstaller web.py (expérimental) mais cela n'a toujours pas fonctionné.

122voto

Tim Peters Points 16225

À en juger par les chemins de fichier, il semble que vous êtes en cours d'exécution Python 3.7. Si oui, vous vous êtes attiré par les nouvelles-en-3.7 comportement décrit ici:

PEP 479 est activée pour tous les code en Python 3.7, ce qui signifie que StopIteration exceptions soulevées directement ou indirectement dans les coroutines et les générateurs sont transformés en RuntimeError exceptions. (Contribué par Yury Selivanov dans bpo-32670.)

Avant ce changement, une StopIteration soulevées par, ou de passage, un générateur simplement terminé le générateur de la durée de vie utile (à l'exception était silencieusement d'ingestion). Le module que vous utilisez doivent être recodées pour fonctionner comme prévu avec 3.7.

Les Chances sont qu'ils vont avoir besoin de changer:

yield next(seq)

pour:

try:
    yield next(seq)
except StopIteration:
    return

3voto

Leo Gomez Points 31

Donc, lors de ma récente de l'auto-apprentissage sur le Python, un parcours m'a obligé à installer Web.py et je commençais à cette erreur, et comme l'un de la réponse a déclaré, 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 tombé sur cette erreur et ont commencé à fouiller le web pour trouver une solution.

Ce que j'ai fait de la recherche à travers webpy git et de trouver la utils.py fichier le plus récent dans https://github.com/webpy/webpy/tree/master/web, téléchargé, et l'a utilisé pour remplacer celui qui était dans ma Lib/site-packages/dossier web (je suis un utilisateur de Windows, et il a travaillé.

Espérons que cela aide quelqu'un.

3voto

WebQube Points 2474

Ma solution était de mettre à jour ces pips

mongoengine de 0.14.0 à 0.19.1 et

flask-mongoengine à 0.9.5

ça a marché.

1voto

Ils ont résolu ce problème, désinstallez simplement votre version actuelle de web.py et j'ai reçu une erreur lors de l'exécution de pip install web.py de windows 10 . J'exécute donc la commande pip install -e git+https://github.com/webpy/webpy.git#egg=webpy pour obtenir la dernière version de la branche master . Cela n'exécutera pas l'erreur RuntimeError: generator raised StopIteration comme la question l'a mentionné.

0voto

Zhang Huangbin Points 66

Cela devrait être corrigé dans # 577: https://github.com/webpy/webpy/pull/577

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X