我得到一個頁面urllib2
,然後解析它與lxml
。通常有兩件事情可以去錯了:一個urllib2.URLError
,或結合'雖然不是'與嘗試/除了
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):'來處理具有相同代碼的兩個異常。 –
也許'繼續'? – Ryan
「這裏有幾個明顯的問題」 - 這些問題對我們來說並不明顯,因爲您實際上沒有描述代碼應該執行什麼操作。例如如果引發'URLError'會發生什麼?如果引發'IncompleteRead'會發生什麼? – mgilson