AttributeError: Das Objekt 'module' hat kein Attribut 'request'.

74

Wenn ich den folgenden Code in Python 3.3 ausführe:

import urllib
tempfile = urllib.request.urlopen("http://yahoo.com")

Ich erhalte folgende Fehlermeldung:

Geben Sie hier die Bildbeschreibung ein

Ich habe dies auch getan, um zu überprüfen:

Geben Sie hier die Bildbeschreibung ein

Was mache ich falsch?

Pruthvi Raj
quelle
1
Sind Sie sicher, dass Sie es in Python 3 ausführen?
Ashwini Chaudhary
Ja, ich bin sicher !!, ich habe versucht, es auch auf 3.2 und 3.4 auszuführen. Kein Glück :(
Pruthvi Raj
11
Vielleicht import urllib.requestdirekt versuchen ? Es scheint nicht, dass urllibdie Submodule selbst mit 3.3.x eingezogen werden.
Jonathan Lonowski
@ JonathanLonowski Danke Mann! du hättest das als Antwort
posten
Dieser Fehler tritt auch auf, wenn Sie eine Datei im selben Verzeichnis haben, das als Standardmodul bezeichnet wird. Ärgerlich aber wahr. Achtung!
Nightforce2

Antworten:

145

Das urllibModul wird in Teile aufgeteilt worden und umbenannt in Python 3 zu urllib.request, urllib.parseund urllib.error.


Importieren urllib.requeststatt urllib.

import urllib.request
falsetru
quelle
1
Ich habe sichergestellt und es auch bei anderen 3.x-Versionen versucht. Außerdem habe ich ein Bild in die Frage eingefügt, um sicherzustellen, dass es ein urllib-Modul gibt. immer noch kein Glück: 3
Pruthvi Raj
2
Aus irgendeinem Grund funktioniert mein Code import urllibauf einem Computer, während der andere dies erfordert import urrlib.request. Beide führen 3.4.2 aus. Wie auch immer, das hat Wunder gewirkt!
Joost
@Joost, Überprüfen Sie die Version, die Sie verwenden, indem Sie ausführen python -V. oder setzen Sie die folgende Zeile in das Skript und führen Sie es aus:import sys; print(sys.version)
falsetru
2
@johan, da beim Importieren eines Pakets das Submodul nicht automatisch importiert wird. (Einige tun dies, wie os.path ...)
falsetru
1
Obwohl dies funktioniert, ist es möglicherweise besser zu erklären, warum import urllibdies nicht funktioniert, damit der Leser dieses Problem besser versteht.
jdhao
3

Interessanterweise bemerkte ich ein IDE-abhängiges Verhalten.

Sowohl Spyder als auch PyCharm verwenden auf meinem Computer denselben Interpreter: In PyCharm muss ich dies tun

importiere urllib.request

während in Spyder,

Urllib importieren

macht gut

JB Lepetit
quelle
Noch seltsamer läuft der Dolmetscher. importiere urllib; urllib.request gibt Ihnen den erwarteten AttributeError, aber führen Sie dann urllib.request erneut aus, und es ist da! Es scheint, dass der Interpreter nach dem Auslösen eines AttributeError ohnehin implizit alle Submodule importiert. Sehr eigenartig.
Sam Bull
1

Wenn dies auf PyCharm ist, stellen Sie sicher, dass Ihr Dateiname nicht urllib.py ist.

Anonyme Person
quelle
0
  • Im visuellen Code müssen Sie import urllib.request schreiben, anstatt nur urllib zu importieren.
  • Wenn Fehler wie Modul x kein Attribut y aufweisen , haben Sie die aktuelle Datei genauso benannt wie das Paket, das Sie importieren möchten.
  • Der Import in Python funktioniert also so, dass zuerst das aktuelle Verzeichnis durchsucht wird. Wenn das gefundene Modul / Paket 'x' u gefunden wird, wird davon ausgegangen, dass die Zieldatei gefunden wurde, und nach 'y' gesucht. Und da Sie 'y' nicht definiert haben, tritt der oben genannte Fehler auf.
Ashraf
quelle