Das urllib-Modul hat die Art und Weise des Zugriffs auf die Funktion request
in Python 3 ge√§ndert. Dies bedeutet, dass, wenn Sie versuchen, auf die "urlopen‚" wie in Python 2 funktioniert, sto√üen Sie auf den "AttributeError: ‚Äòmodule‚Äô Objekt hat kein Attribut ‚Äòurlopen‚Äô‚" error.
In diesem Leitfaden erfahren Sie, was dieser Fehler bedeutet und warum er ausgelöst wird. Es fuhrt ein Beispiel fur diesen Fehler durch, damit Sie lernen, wie Sie ihn beheben können.
AttributeError: ‘module’ -Objekt hat kein Attribut ‘urlopen’
Die "urllib‚" module bietet eine Reihe von Funktionen im Zusammenhang mit dem √ñffnen von URLs und dem Lesen von Daten von Websites. Die Syntax fur die Verwendung dieser Bibliothek unterscheidet sich zwischen Python 2 und Python 3.
In Python 2 , "urlopen‚" ist Teil der "URL‚" Modul. Das bedeutet, dass Sie es mit urllib.urlopen in Ihren Code importieren k√∂nnen. In Python 3 ist "urlopen‚" ist Teil einer "Anfrage‚" Modul innerhalb der "URL" Methode:
- Python 2: urllib -> urlopen
- Python 3: urllib -> Anfrage -> urlopen
Die "Anfrage‚" -Modul ist, wo viele der Web-Request-Funktionen in der "URL‚" Paket gebundelt sind. AttributeErrors werden ausgel√∂st, wenn Sie versuchen, auf ein Attribut von einem Modul zuzugreifen, das dieses Attribut nicht enth√§lt. In diesem Fall "urlopen‚" ist nicht Teil der "URL‚" Modul.
Ein Beispielszenario
Erstellen Sie ein Programm, das Daten von einem Dienst namens JSONPlaceholder abruft. Dieser Dienst stellt Dummy-Daten bereit, die Sie fur Ihr Beispiel verwenden können.
Rufen Sie einen einzelnen Beitrag mit der ID #2 ab. Um zu beginnen, importieren Sie das URL-Modul:
Mit dieser Anweisung k√∂nnen Sie Funktionen aus der "urllib‚" Modul im Programm.
81 % der Teilnehmer gaben an, dass sie sich nach dem Besuch eines Bootcamps hinsichtlich ihrer Berufsaussichten im Tech-Bereich sicherer fuhlten. Lassen Sie sich noch heute in ein Bootcamp einweisen.
Der durchschnittliche Bootcamp-Absolvent verbrachte weniger als sechs Monate im Karriereubergang, vom Beginn eines Bootcamps bis zur Suche nach seinem ersten Job.
Stellen Sie als N√§chstes eine Anfrage mit ‚Äûurlopen‚". Dadurch k√∂nnen Sie die Daten von einem Endpunkt in der JSONPlaceholder-API abrufen:
Dieser Code liest Daten fur den Beitrag mit der ID #2 in der JSONPlaceholder-API.
Der Code druckt die als JSON-String formatierte Antwort unserer Anfrage mithilfe einer print-Anweisung an die Konsole. Fuhren Sie den Code aus und sehen Sie, was passiert:
Das Programm gibt einen Fehler zuruck .
Die Lösung
Sie verwenden die Python 2-Syntax, um auf die ‚Äûurlopen‚" Methode. ‚Äûurlopen‚" ist kein Attribut von "urllib‚" in Python 3. Sie verweisen auf "urlopen‚" als Attribut von "urllib‚" Daher kann das Programm nicht ordnungsgem√§√ü ausgefuhrt werden.
Um dieses Problem zu beheben, importieren Sie die "Anfrage‚" Modul aus der "urllib‚" Modul. Dieses Modul enth√§lt die "urlopen‚" Methode:
Weiter, Ändern Sie den Code so, dass Sie beim Abrufen von Daten aus der JSONPlaceholder-API auf das Modul urllib.request verweisen:
Dieser Code liest den Inhalt des API-Endpunkts, den wir aufrufen. Lassen Sie uns unseren Code ausfuhren:
Sie haben die erhaltene Antwort mit der Methode decode()
entschlusselt. Tun Sie dies, damit Sie die von der Methode urlopen()
zuruckgegebenen Werte als String lesen können.
Schlussfolgerung
Der "urlopen‚" Funktion ist kein Objekt von "urllib‚" in Python 3. Um auf diese Funktion zuzugreifen, importieren Sie "urllib.request‚" in Ihren Code und verweisen Sie auf die Funktion urllib.request.urlopen()
.