【发布时间】:2016-01-20 23:31:56
【问题描述】:
我得到一个带有urllib2 的页面,然后用lxml 解析它。通常有两件事会出错:urllib2.URLError,或httplib.IncompleteRead
def get_page(url):
response = None
while not response:
try:
response = urllib2.urlopen(url)
except urllib2.URLError:
response = urllib2.urlopen(url)
except httplib.IncompleteRead:
print '**** IncompleteRead for response from %s, retrying' % url
html_parser = etree.HTMLParser()
tree = etree.parse(response, html_parser)
return tree
这里有几个明显的问题:
- 第一个
except与前面的try执行完全相同的操作。 - 无论我们是否有
response,都将尝试使用lxml进行解析。
所以:
- 第一个
except需要做什么?pass可以接受吗? - 我的理解是,在
try中只能尝试一个操作,所以我不愿意将解析移到那里。事实上,一个函数本身应该只执行一个动作——解析是否属于它自己的函数?
【问题讨论】:
-
如果你想在这两种情况下都重试,你可以
except (urllib2.URLError, httplib.IncompleteRead):用相同的代码处理这两种异常。 -
“这里有几个明显的问题”——这些问题对我们来说并不明显,因为您实际上还没有描述代码应该做什么。例如如果提出
URLError会发生什么?如果提出IncompleteRead会发生什么?
标签: python python-2.7 while-loop try-catch