我正在测试一些异常处理,并想知道以下代码中可能发生的网络相关错误:
candidate = urllib2.urlopen() #1
candidate.read() #2
我知道#1
导致URLError
。是否还有其他错误可以提出?特别是#2
需要网络连接吗?
答案 0 :(得分:3)
阅读要求套接字仍处于打开状态;虽然一些响应数据通常会被缓冲,但您可以通过读取来降低数据。 candidate.read()
调用将一直阻塞,直到读完整个响应。
因此socket.error
(IOError
的子类)即使在candidate.read()
调用期间也可以被提升。
除了urllib2.URLError
异常(加上子类)之外,urllib2.urlopen()
还可以引发httplib.HTTPException
with various subclasses,socket.error
,或者在提供无效数据(非法网址字符串等)时,ValueError
。获得响应对象后,response.read()
也可以提升socket.error
和httplib.HTTPException
。
httplib.HTTPException
是一个直的Exception
子类。 socket.error
和urllib2.URLError
是IOError
个子类。