2015-05-15 13 views
7

Il mio codice funziona perfettamente in PyCharm, ma ho dei messaggi di errore durante il tentativo di aprirlo nel terminale. Cosa c'è che non va nel mio codice o dove ho fatto degli errori?Python 3: AttributeError: l'oggetto 'module' non ha attributo '__path__' usando urllib nel terminale

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

uscita dal terminale:

λ 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 
+0

'urllib.request' importazione è valido ??? –

+1

@VivekSable, sì per python3. –

risposta

9

È chiamato un file C:\Users\Przemek\Desktop\urllib.py, è necessario rinominarlo. Stai importando da quello non il modulo attuale. rinominare C:\Users\Przemek\Desktop\urllib.py e rimuovere qualsiasi C:\Users\Przemek\Desktop\urllib.pyc.

Non è il file in esecuzione ma il file si trova nella stessa directory, quindi python controlla prima la directory corrente e quindi l'errore.

+0

Sì, è tutto, avevo un file chiamato urllib.py nella stessa directory. Grazie per l'aiuto! – Przemek

+0

@Przemek. no prob, succede abbastanza spesso –

0

Si sta seguendo il pacchetto della libreria standard urllib denominando il file sorgente urllib.py. Rinominalo!

Il fatto che tutto funzioni in Pycharm è una straordinaria impresa di ingegneria sugli sviluppatori PyCharm!

Qui è possibile utilizzare anche le importazioni assolute (from __future__ import absolute_import); ma in questo caso non penso che ti sarà d'aiuto dato che il tuo nome sorgente di avvio ombreggia la stessa libreria/pacchetto che stai cercando di usare!

-1

Inoltre, questo:

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

dovrebbe essere come questo:

import urllib 
with urllib.urlopen('http://python.org/') as response: 
+0

Non proprio, l'OP sta usando python3. –

+0

Mio Male, pensavo 2.7 !! –

Problemi correlati