Ответ 1
HTTPError
является файлоподобным объектом. Вы можете поймать его, а затем read
его содержимое.
try:
resp = urllib2.urlopen(url)
contents = resp.read()
except urllib2.HTTPError, error:
contents = error.read()
Я получаю ответ "Ошибка HTTP 500: Внутренняя ошибка сервера", но я все же хочу прочитать данные внутри ошибки 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
.
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()