Werkzeug: 处理异常时导入错误导致异常

创建于 2016-12-22  ·  5评论  ·  资料来源: pallets/werkzeug

经过一些调试,我将以下错误缩小到werkzeug/http.py#L26 ,它给出了以下异常: ImportError: 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 等级

相关问题

davidism picture davidism  ·  9评论

golf-player picture golf-player  ·  10评论

KangOl picture KangOl  ·  16评论

masklinn picture masklinn  ·  11评论

SimonSapin picture SimonSapin  ·  12评论