Werkzeug: ImportErrorにより、例外の処理中に例外が発生します

作成日 2016年12月22日  ·  5コメント  ·  ソース: pallets/werkzeug

少しデバッグした後、次のエラーをwerkzeug / http.py#L26ImportError: cannot import name 'parse_http_list' 。 以下はトレースバック全体です。これには、古いpython参照へのフォールバックを試みる例外内の例外が含まれます。

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/werkzeug/http.py", line 26, in <module>
    from urllib2 import parse_http_list as _parse_list_header
ImportError: No module named 'urllib2'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "examples/http.py", line 2, in <module>
    from flask import Flask
  File "/usr/local/lib/python3.5/site-packages/flask/__init__.py", line 17, in <module>
    from werkzeug.exceptions import abort
  File "/usr/local/lib/python3.5/site-packages/werkzeug/__init__.py", line 152, in <module>
    __import__('werkzeug.exceptions')
  File "/usr/local/lib/python3.5/site-packages/werkzeug/exceptions.py", line 71, in <module>
    from werkzeug.wrappers import Response
  File "/usr/local/lib/python3.5/site-packages/werkzeug/wrappers.py", line 26, in <module>
    from werkzeug.http import HTTP_STATUS_CODES, \
  File "/usr/local/lib/python3.5/site-packages/werkzeug/http.py", line 28, in <module>
    from urllib.request import parse_http_list as _parse_list_header
  File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py", line 88, in <module>
    import http.client
  File "/Users/alexgurrola/Projects/intrepid/examples/http.py", line 2, in <module>
    from flask import Flask
ImportError: cannot import name 'Flask'

最も参考になるコメント

ファイルの名前をhttp.pyから別の名前に変更してください。そうしないと、stdlibのhttpモジュールと衝突します。

全てのコメント5件

これを再現するための例を提供してください。

Python 3.5.2を使用すると、 werkzeug/http.pyこの段落は繰り返し失敗します。

try:
    from urllib.request import parse_http_list as _parse_list_header
    from urllib.parse import unquote_to_bytes as _unquote
except ImportError:  # pragma: no cover
    from urllib2 import parse_http_list as _parse_list_header, \
        unquote as _unquote

また、上記のスクリプトは、 try/except存在しない場合、より深いレベルで文句を言います。これにより、urllibを使用した内部APIの変更の可能性が警告されました。 それが役立つ場合は、Flask 0.12を使用して次のスクリプトを実行したときに、最初に問題が見つかりました。

import os
from flask import Flask

app = Flask(__name__)
app.config.from_object(os.environ['APP_SETTINGS'])


@app.route('/')
def hello():
    return "Hello World!"


if __name__ == '__main__':
    app.run()

ファイルの名前をhttp.pyから別の名前に変更してください。そうしないと、stdlibのhttpモジュールと衝突します。

どうやらPythonは同じ名前のスクリプトを区別できないので、これらのライブラリを駆け抜けて私を追いかけました...助けてくれてありがとう。

ファイルの名前をhttp.pyから別の名前に変更してください。そうしないと、stdlibのhttpモジュールと衝突します。

私はPythonを初めて使用するので、同じ間違いを犯します。

このページは役に立ちましたか?
0 / 5 - 0 評価