python 3,错误处理urllib请求

python 3,错误处理urllib请求,python,urllib,http-error,Python,Urllib,Http Error,您好,当我在包含错误(如“Microsoft VBScript运行时错误”)的页面上运行以下代码时。。。请求失败并返回为urllib.error.urleror。。。即使页面包含大量其他代码。如何从页面返回所有html,而不仅仅是异常错误。我希望尽可能地保留我当前的代码(如果可能的话)。谢谢谢谢,我已经解决了这个问题 from difflib import * import urllib.request,urllib.parse,urllib.error from urllib.parse im

您好,当我在包含错误(如“Microsoft VBScript运行时错误”)的页面上运行以下代码时。。。请求失败并返回为urllib.error.urleror。。。即使页面包含大量其他代码。如何从页面返回所有html,而不仅仅是异常错误。我希望尽可能地保留我当前的代码(如果可能的话)。谢谢

谢谢,我已经解决了这个问题

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 = ''

URLError具有“reason”属性,因此您可以调用:

except urllib.error.URLError as e: ResponseData = e.read().decode("utf8", 'ignore')
(例如,这将是“禁止的”)

您还应该注意在错误的超类之前捕获错误的子类。在您的示例中,这意味着将HTTPError放在URLError之前。 否则,子类将永远不会被捕获

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