web-dev-qa-db-ja.com

Python 3:AttributeError: 'module' object has no attribute '__path__' using urllib using terminal

私のコードはPyCharmで完全に実行されていますが、ターミナルで開こうとするとエラーメッセージが表示されます。私のコードの何が問題になっていますか、またはどこでミスをしましたか?

import urllib.request
with urllib.request.urlopen('http://python.org/') as response:
   html = response.read()
   print(html)

端末からの出力:

λ python Desktop\url1.py
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 2218, in _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "Desktop\url1.py", line 1, in <module>
    import urllib.request
  File "C:\Users\Przemek\Desktop\urllib.py", line 1, in <module>
    import urllib.request
ImportError: No module named 'urllib.request'; 'urllib' is not a package
12
Przemek

ファイルをC:\Users\Przemek\Desktop\urllib.pyと呼びました。名前を変更する必要があります。実際のモジュールではなく、そこからインポートしています。 C:\Users\Przemek\Desktop\urllib.pyの名前を変更し、C:\Users\Przemek\Desktop\urllib.pycを削除します。

実行中のファイルではありませんが、同じディレクトリにファイルがあるため、pythonは最初に現在のディレクトリをチェックするため、エラーが発生します。

12

ソースファイルにurllib.pyという名前を付けて、標準ライブラリパッケージurllibをシャドウイングします。名前を変更してください!

これがPycharmでまったく機能するという事実は、PyCharm開発者にとってエンジニアリングの驚くべき偉業です!

ここでは絶対インポート(from __future__ import absolute_import)も使用できます。しかし、この場合、起動ソース名が、使用しようとしているライブラリ/パッケージを覆い隠しているため、役に立たないと思います!

0
James Mills