[英]Why am I getting an AttributeError when trying to print out
我正在通過以下教程學習urllib2 http://docs.python.org/howto/urllib2.html#urlerror運行以下代碼會產生與教程不同的結果
import urllib2
req = urllib2.Request('http://www.pretend-o-server.org')
try:
urllib2.urlopen(req)
except urllib2.URLError, e:
print e.reason
Python解釋器吐了回來
Traceback (most recent call last):
File "urlerror.py", line 8, in <module>
print e.reason
AttributeError: 'HTTPError' object has no attribute 'reason'
怎么會發生這種情況?
當我嘗試打印出代碼屬性時,它工作正常
import urllib2
req = urllib2.Request('http://www.pretend-o-server.org')
try:
urllib2.urlopen(req)
except urllib2.URLError, e:
print e.code
根據錯誤類型,對象e
可能攜帶也可能不攜帶該屬性。
在您提供的鏈接中有一個更完整的示例:
2號
from urllib2 import Request, urlopen, URLError
req = Request(someurl)
try:
response = urlopen(req)
except URLError, e:
if hasattr(e, 'reason'): # <--
print 'We failed to reach a server.'
print 'Reason: ', e.reason
elif hasattr(e, 'code'): # <--
print 'The server couldn\'t fulfill the request.'
print 'Error code: ', e.code
else:
# everything is fine
因為沒有這樣的屬性。 嘗試:
print str(e)
你會變得很好:
HTTP Error 404: Not Found
我得到AttributeError的原因是因為我使用的是OpenDNS。 顯然,即使您傳入虛假URL,OpenDNS也會將其視為存在。 所以切換到谷歌DNS服務器后,我得到的預期結果是:
[Errno -2] Name or service not known
另外我應該提一下我運行此代碼所得到的回溯,除了try和except之外的所有內容
from urllib2 import Request, urlopen, URLError, HTTPError
req = Request('http://www.pretend_server.com')
urlopen(req)
這是
Traceback (most recent call last):
File "urlerror.py", line 5, in <module>
urlopen(req)
File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/usr/lib/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.6/urllib2.py", line 435, in error
return self._call_chain(*args)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 518, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found
哪個溫柔(男)男人? 來自IRC #python告訴我非常奇怪,然后問我是否正在使用OpenDNS我回答是的。 因此他們建議我將其切換到谷歌,我繼續這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.