Werkzeug: ImportError menyebabkan Pengecualian saat menangani Pengecualian

Dibuat pada 22 Des 2016  ·  5Komentar  ·  Sumber: pallets/werkzeug

Setelah sedikit debugging, saya telah mempersempit kesalahan berikut menjadi werkzeug/http.py#L26 , yang memberikan pengecualian berikut: ImportError: cannot import name 'parse_http_list' . Di bawah ini adalah seluruh traceback, yang melibatkan pengecualian di dalam pengecualian yang mencoba mundur ke referensi python lama.

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'

Komentar yang paling membantu

Silakan ganti nama file Anda dari http.py menjadi sesuatu yang lain, jika tidak maka akan bentrok dengan modul http dari stdlib.

Semua 5 komentar

Berikan contoh untuk mereproduksi ini.

Menggunakan Python 3.5.2 paragraf ini di werkzeug/http.py akan gagal berulang kali.

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

Juga, skrip di atas akan mengeluh pada tingkat yang lebih dalam tanpa hadiah try/except , yang mengingatkan saya tentang kemungkinan perubahan dalam API internal dengan urllib. Jika ada yang membantu, saya menemukan masalah awalnya saat menggunakan Flask 0.12 dan menjalankan skrip berikut.

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()

Silakan ganti nama file Anda dari http.py menjadi sesuatu yang lain, jika tidak maka akan bentrok dengan modul http dari stdlib.

Rupanya Python tidak dapat membedakan antara skrip dengan nama yang sama, jadi itu mengirim saya ke pengejaran angsa liar melalui perpustakaan ini ... Saya menghargai bantuannya.

Silakan ganti nama file Anda dari http.py menjadi sesuatu yang lain, jika tidak maka akan bentrok dengan modul http dari stdlib.

Saya baru di Python, jadi saya mengambil kesalahan yang sama juga....

Apakah halaman ini membantu?
0 / 5 - 0 peringkat