2014-12-08 7 views
2

웹 사이트에서 html 코드를 가져 와서 인쇄하는 자습서 코드를 시험해 보겠습니다. 우분투에서 파이썬 3.4.0을 사용하고 있습니다. 코드 :python urllib 오류 - AttributeError : 'module'객체에 'request'속성이 없습니다.

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

나는 이전 솔루션을보고 시도했지만 urllib 만 가져 왔지만 여전히 작동하지 않습니다. 표시되는 오류 메시지는 다음과 같습니다.

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' 

답변

4

이것은 불쾌한 우연한 것처럼 보입니다.

TL : 스크립트의 이름을 string.py으로 지정하지 마십시오.


여기가 어떻게됩니까?

  1. urllib.request을 가져 오려고합니다.

  2. urllib.request

    email.quoprimime를 가져올 시도 email.charset을 가져올 시도 email.utils을 수입하려고하는 email.message을 가져올 시도 email.feedparser을 수입하려고하는 email.parser를 가져올 시도 http.client을 수입하려고합니다.

  3. email.quoprimime 시도는 the standard Python string module로 -하지만 현재 작업 디렉토리가 표준 파이썬 라이브러리 디렉토리를 통해 우선 순위를 가지고 있기 때문에, 대신 당신의 string.py을 발견하고 그것을 가져하려고 기대 string를 가져옵니다.

  4. string.py을 가져올 때 urllib.request을 가져 오려고합니다. urllib.request이 아직 가져오고 있으므로 urllib의 골격은 request 속성없이 반환됩니다.

  5. 특성을 찾을 수 없어 가져온 string.py이 실패하기 때문에 예외가 다시 전파되기 시작합니다.

  6. 그러나 더 기다려주세요! 가져 오기 중에 오류가 발생했기 때문에 우분투는 dpkg 패키지가 누락되었는지 확인하여 도움을 얻으려고합니다. 그렇다면 "이 모듈을 놓친 것처럼 보입니다. ...

    적절한 패키지를 찾고위한 메커니즘이 작동 그래서? "를 apt-get 할 ...

  7. ...하지만 그것을 가져올 시도하고 다시 실패 있도록 적절한 패키지 자체를 찾고에 대한 모듈은 urllib.request에 따라 달라집니다 파일 이름으로 string.py을 포착하기 때문에

  8. 한마디로

는, 당신은 다른 모듈의 많은 파산, 심지어 원인이 모듈 누락 때 도움이 될했는데 모듈을 돌파 the standard string module를 오버라이드 대혼란. 다행히도 해결책은 쉽습니다. 스크립트의 이름을 바꿉니다.

+0

파일 이름을 string1.py로 변경했지만 "ImportError : 'string'의 잘못된 매직 번호 : b '\ x03 \ xf3 \ r \ n" " 그러나 다른 이름이 사용되었습니다."string1"이 충돌을 일으키는 지 어떻게 알 수 있습니까? – silentobserver

+0

@ user294665 : 이전 시도에서'string.pyc' 파일이있는 것 같습니다. 'string1.py'를 담고있는 디렉토리에'__pycache__' 디렉토리가 있다면 제거하십시오. – icktoofay

+0

그게 정확한 원인이었습니다! 대단히 감사합니다. 이제는 잘 작동합니다. – silentobserver

관련 문제