web-dev-qa-db-fra.com

Python 3: AttributeError: l'objet 'module' n'a pas d'attribut '__path__' en utilisant urllib dans le terminal

Mon code fonctionne parfaitement dans PyCharm, mais j'ai des messages d'erreur en essayant de l'ouvrir dans le terminal. Quel est le problème avec mon code ou où j'ai fait des erreurs?

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

Sortie du terminal:

λ 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

Vous avez appelé un fichier C:\Users\Przemek\Desktop\urllib.py, vous devez le renommer. Vous importez de ce pas le module réel. Renommer C:\Users\Przemek\Desktop\urllib.py et supprimez tout C:\Users\Przemek\Desktop\urllib.pyc.

Ce n'est pas le fichier que vous exécutez mais vous avez le fichier dans le même répertoire donc python vérifie d'abord le répertoire courant d'où l'erreur.

12

Vous surveillez le package de bibliothèque standard urllib en nommant votre fichier source urllib.py. Renommez-le!

Le fait que cela fonctionne du tout dans Pycharm est un exploit d'ingénierie incroyable pour les développeurs PyCharm!

Vous pouvez également utiliser des importations absolues (from __future__ import absolute_import) ici; mais dans ce cas, je ne pense pas que cela vous aidera, car le nom de votre source de démarrage masque la bibliothèque/le package que vous essayez d'utiliser!

0
James Mills