Python 3, обработка ошибок запросов urllib

from difflib import *
import urllib.request,urllib.parse,urllib.error
from urllib.parse import unquote
import time
import pdb

try:
    file2 = urllib.request.Request('site goes here')
    file2.add_header("User-Agent", 'Opera/9.61 (Windows NT 5.1; U; en) Presto/2.1.1')
    ResponseData = urllib.request.urlopen(file2).read().decode("utf8", 'ignore')
except urllib.error.URLError as e: print('http'); ResponseData = ''
except socket.error as e: ResponseData = ''
except socket.timeout as e: ResponseData = ''
except UnicodeEncodeError as e: ResponseData = ''
except http.client.BadStatusLine as e: ResponseData = ''
except http.client.IncompleteRead as e: ResponseData = ''
except urllib.error.HTTPError as e: ResponseData = ''

Привет, когда я запускаю следующий код на странице, содержащей такие ошибки, как «Ошибка времени выполнения Microsoft VBScript»… запрос завершается сбоем и возвращается как urllib.error.URLError… хотя страница содержит много другого кода. Как я могу вернуть ВЕСЬ html со страницы, а не только ошибку исключения. Я хотел бы максимально сохранить свой текущий код (если это возможно). Спасибо


person Rhys    schedule 18.08.2012    source источник


Ответы (2)


спасибо, я решил проблему

except urllib.error.URLError as e: ResponseData = e.read().decode("utf8", 'ignore')
person Rhys    schedule 19.08.2012

URLError имеет свойство «причина», поэтому вы можете вызвать:

except urllib.error.URLError as e: ResponseData = e.reason

(Например, это будет «Запрещено»).

Вы также должны быть осторожны с отловом подкласса ошибок перед их суперклассом. В вашем примере это будет означать размещение HTTPError перед URLError. В противном случае подкласс никогда не будет пойман.

person mmagician    schedule 20.10.2017