Il modulo urllib ha cambiato il modo in cui si accede alla funzione request
in Python 3. Ciò significa che se provi a fare riferimento a "urlopen" funzione come in Python 2, incontrerai l’errore "AttributeError: ‚Äòmodule‚Äô l’oggetto non ha attributi ‚Äòurlopen‚Äô" error.
Questa guida spiega cosa significa questo errore e perché viene generato. Viene illustrato un esempio di questo errore in modo che tu possa imparare a risolverlo.
AttributeError: ‚Äòmodule‚Äô l’oggetto non ha attributi ‚Äòurlopen‚Äô
L’elemento "urllib" Il modulo fornisce una serie di funzioni relative all’apertura degli URL e alla lettura dei dati dai siti web. La sintassi per l’utilizzo di questa libreria è diversa tra Python 2 e Python 3.
In Python 2 , "urlopen" fa parte del "urllib" modulo. Ciò significa che puoi importarlo nel tuo codice utilizzando urllib.urlopen. In Python 3, "urlopen" fa parte di una "richiesta" modulo all’interno del "urllib" metodo:
- Python 2: urllib -> urlopen
- Python 3: urllib -> richiesta -> urlopen
La "richiesta" è dove molte delle funzioni di richiesta web nel modulo "urllib" pacchetto sono impacchettati. AttributeErrors vengono generati quando si tenta di accedere a un attributo da un modulo che non contiene tale attributo. In questo caso, "urlopen" non fa parte del "urllib" modulo.
Uno scenario di esempio
Crea un programma che recupera i dati da un servizio chiamato JSONPlaceholder. Questo servizio fornisce dati fittizi che puoi utilizzare per il tuo esempio.
Recupera un singolo post con l’ID #2. Per iniziare, importa il modulo urllib:
Questa istruzione consente di utilizzare funzioni all’interno di "urllib" modulo nel programma.
L’81% dei partecipanti ha dichiarato di sentirsi più sicuro delle proprie prospettive di lavoro nel settore tecnologico dopo aver frequentato un bootcamp. Fatti abbinare a un bootcamp oggi.
Il laureato medio di un bootcamp ha trascorso meno di sei mesi nella transizione di carriera, dall’avvio di un bootcamp alla ricerca del primo lavoro.
Successivamente, fai una richiesta utilizzando "urlopen". Ciò ti consentirà di recuperare i dati da un endpoint sull’API JSONPlaceholder:
Questo codice legge i dati per il post con l’ID #2 sull’API JSONPlaceholder.
Il codice stampa la risposta dalla nostra richiesta, formattata come stringa JSON, sulla console utilizzando un’istruzione print. Esegui il codice e guarda cosa succede:
Il programma restituisce un errore .
La soluzione
Stai utilizzando la sintassi di Python 2 per accedere alla "urlopen" metodo. "urlopen" non è un attributo di "urllib" in Python 3. Fai riferimento a "urlopen" come attributo di "urllib" quindi il programma non viene eseguito correttamente.
Per risolvere questo problema, importa la "richiesta" modulo dal "urllib" modulo. Questo modulo contiene il file "urlopen" metodo:
Avanti, modifica il codice in modo da fare riferimento al modulo urllib.request quando recuperi i dati dall’API JSONPlaceholder:
Questo codice leggerà il contenuto dell’endpoint API che chiamiamo. Eseguiamo il nostro codice:
Hai decodificato la risposta che ricevi utilizzando il metodo decode()
. Fallo in modo da poter leggere i valori restituiti dal metodo urlopen()
come una stringa.
Conclusione
Il metodo "urlopen" la funzione non è un oggetto di "urllib" in Python 3. Per accedere a questa funzione, importa "urllib.request" nel tuo codice e fai riferimento alla funzione urllib.request.urlopen()
.