簡體   English   中英

為什么我在嘗試打印時遇到AttributeError

[英]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'

怎么會發生這種情況?

UPDATE

當我嘗試打印出代碼屬性時,它工作正常

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM