Python urllib error - AttributeError object: 'module' has no attribute 'request'

I am trying to use a tutorial code that extracts HTML from a website and prints it. I am using python 3.4.0 on ubuntu. Code:

import urllib.request
page = urllib.request.urlopen("http://www.brainjar.com/java/host/test.html")
text = page.read().decode("utf8")
print(text)

      

I have seen previous solutions and tried them, I also tried to import urllib only but it still doesn't work. An error message is displayed:

Traceback (most recent call last):
File "string.py", line 1, in <module>
import urllib.request
File "/usr/lib/python3.4/urllib/request.py", line 88, in <module>
import http.client
File "/usr/lib/python3.4/http/client.py", line 69, in <module>
import email.parser
File "/usr/lib/python3.4/email/parser.py", line 12, in <module>
from email.feedparser import FeedParser, BytesFeedParser
File "/usr/lib/python3.4/email/feedparser.py", line 27, in <module>
from email import message
File "/usr/lib/python3.4/email/message.py", line 15, in <module>
from email import utils
File "/usr/lib/python3.4/email/utils.py", line 40, in <module>
from email.charset import Charset
File "/usr/lib/python3.4/email/charset.py", line 15, in <module>
import email.quoprimime
File "/usr/lib/python3.4/email/quoprimime.py", line 44, in <module>
from string import ascii_letters, digits, hexdigits
File "/media/saiwal/D89602199601F930/Documents/Copy/codes/python/headfirst/string.py", line 2, in <module>
page = urllib.request.urlopen("http://www.brainjar.com/java/host/test.html")
AttributeError: 'module' object has no attribute 'request'
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
from apport.report import Report
File "/usr/lib/python3/dist-packages/apport/report.py", line 21, in <module>
from urllib.request import urlopen
File "/usr/lib/python3.4/urllib/request.py", line 88, in <module>
import http.client
File "/usr/lib/python3.4/http/client.py", line 69, in <module>
import email.parser
File "/usr/lib/python3.4/email/parser.py", line 12, in <module>
from email.feedparser import FeedParser, BytesFeedParser
File "/usr/lib/python3.4/email/feedparser.py", line 27, in <module>
from email import message
File "/usr/lib/python3.4/email/message.py", line 15, in <module>
from email import utils
File "/usr/lib/python3.4/email/utils.py", line 40, in <module>
from email.charset import Charset
File "/usr/lib/python3.4/email/charset.py", line 15, in <module>
import email.quoprimime
File "/usr/lib/python3.4/email/quoprimime.py", line 44, in <module>
from string import ascii_letters, digits, hexdigits
File "/media/saiwal/D89602199601F930/Documents/Copy/codes/python/headfirst/string.py", line 2, in <module>
page = urllib.request.urlopen("http://www.brainjar.com/java/host/test.html")
AttributeError: 'module' object has no attribute 'request'

Original exception was:
Traceback (most recent call last):
File "string.py", line 1, in <module>
import urllib.request
File "/usr/lib/python3.4/urllib/request.py", line 88, in <module>
import http.client
File "/usr/lib/python3.4/http/client.py", line 69, in <module>
import email.parser
File "/usr/lib/python3.4/email/parser.py", line 12, in <module>
from email.feedparser import FeedParser, BytesFeedParser
File "/usr/lib/python3.4/email/feedparser.py", line 27, in <module>
from email import message
File "/usr/lib/python3.4/email/message.py", line 15, in <module>
from email import utils
File "/usr/lib/python3.4/email/utils.py", line 40, in <module>
from email.charset import Charset
File "/usr/lib/python3.4/email/charset.py", line 15, in <module>
import email.quoprimime
File "/usr/lib/python3.4/email/quoprimime.py", line 44, in <module>
from string import ascii_letters, digits, hexdigits
File "/media/saiwal/D89602199601F930/Documents/Copy/codes/python/headfirst/string.py", line 2, in <module>
page = urllib.request.urlopen("http://www.brainjar.com/java/host/test.html")
AttributeError: 'module' object has no attribute 'request'

      

+3


source to share


1 answer


It looks like an unpleasant coincidence.

TL; DR: Don't include your script string.py

.




So what's going on here?

  • You are trying to import urllib.request

    .

  • urllib.request

    trying to import http.client

    , who is trying to import email.parser

    , who is trying to import email.feedparser

    , who is trying email.message

    to import email.utils

    , who is trying to import email.charset

    , who is trying to import email.quoprimime

    .

  • email.quoprimime

    tries to import string

    , expecting it to be a standard Python modulestring

    , but since the current working directory takes precedence over the standard Python library directories, it finds it instead string.py

    and tries to import it.

  • When importing, string.py

    you are trying to import urllib.request

    . Since urllib.request

    everything is still being imported, you are returning a skeleton urllib

    with no attribute request

    .

  • Since your imported string.py

    then crashes because it can't find the attribute request

    , the exception starts propagating back.

  • But wait, theres more! Since there was an error during import, Ubuntu tries to be helpful if you don't have the dpkg package. If so, he could say, "Hey, looks like you are missing this module, want apt-get

    it?" Therefore, the search mechanism for the corresponding package is activated ...

  • ... but the module to find the appropriate package depends on urllib.request

    , so it tries to import it and fails again ...

In short, because you chose string.py

as the filename, you redefined the standard string

module
, which broke many other modules, and even broke the module that should have been useful when you were absent from the module, which caused a lot of chaos. Fortunately, the solution is easy: rename the script.

+4


source







All Articles