Переопределение urllib2.HTTPError или urllib.ошибка.HTTPError и чтение ответа HTML в любом случае
я получаю ответ "HTTP Error 500: Internal Server Error", но я все еще хочу прочитать данные внутри ошибки HTML.
С Python 2.6 я обычно получаю страницу, используя:
import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()
при попытке использовать это на неудачном URL, я получаю исключение urllib2.HTTPError:
urllib2.HTTPError: HTTP Error 500: Internal Server Error
как я могу получить такие страницы ошибок (с или без urllib2), все время, пока они возвращают внутренние ошибки сервера?
обратите внимание, что с Python 3, соответствующее исключение -urllib.error.HTTPError.
3 ответов:
The
HTTPError- это файл-как объект. Вы можете поймать его, а затемreadего содержимое.try: resp = urllib2.urlopen(url) contents = resp.read() except urllib2.HTTPError, error: contents = error.read()
Если вы хотите прочитать тело 500:
request = urllib2.Request(url, data, headers) try: resp = urllib2.urlopen(request) print resp.read() except urllib2.HTTPError, error: print "ERROR: ", error.read()в вашем случае, вам не нужно создать запрос. Просто сделай
try: resp = urllib2.urlopen(url) print resp.read() except urllib2.HTTPError, error: print "ERROR: ", error.read()Итак, вы не переопределяете urllib2.HTTPError, вы просто обрабатываете исключение.
alist=['http://someurl.com'] def testUrl(): errList=[] for URL in alist: try: urllib2.urlopen(URL) except urllib2.URLError, err: (err.reason != 200) errList.append(URL+" "+str(err.reason)) return URL+" "+str(err.reason) return "".join(errList) testUrl()
Comments