web-dev-qa-db-ja.com

アプリを実行しようとするたびに「RuntimeError:generator raised 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(実験的)を再インストールしようとしましたが、まだ動作しませんでした。

25
no4syn

ファイルパスから判断すると、Python 3.7を実行しているように見えます。もしそうなら、あなたは3.7の新動作に捕らわれている ここで説明

PEP 479はPython 3.7のすべてのコードで有効になっています。つまり、コルーチンおよびジェネレーターで直接または間接的に発生したStopIteration例外はRuntimeError例外に変換されます。 (bpo-32670でYury Selivanovによって寄贈されました。)

この変更の前は、ジェネレーターによって発生または通過するStopIterationは、ジェネレーターの耐用年数を単に終了させました(例外は黙って飲み込まれました)。使用しているモジュールは、3.7で意図したとおりに動作するようにコーディングし直す必要があります。

変更する必要がある可能性があります。

yield next(seq)

に:

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

そのため、最近のPythonの自己学習中に、コースでWeb.pyをインストールする必要があり、このエラーが発生しました。答えの1つとして、Python 3.7と互換性があるように更新する必要がありました。

pip3 install web.py==0.40-dev1を含むパッケージをインストールすると、このエラーが発生し、Webでソリューションを検索し始めました。

私がやったのは、webpy gitを検索して、 https://github.com/で最近のものであったutils.pyファイルを見つけることでしたwebpy/webpy/tree/master/web をダウンロードし、それを使用してLib/site-packages/webフォルダー(私はWindowsユーザーです)にあるものを置き換え、それが機能しました。

これが誰かを助けることを願っています。

2
Leo Gomez

彼らはこの問題を修正し、現在のweb.pyバージョンをアンインストールするだけで、pip install web.pyからwindows 10を実行するとエラーが発生しました。そこで、pip install -e git+https://github.com/webpy/webpy.git#Egg=webpyコマンドを実行して、masterブランチから最新バージョンを取得します。質問にあるように、これはRuntimeError: generator raised StopIterationエラーを実行しません。

0