2012-08-11 96 views
-1

我已經創建瞭解析網站的小類。Python3 - 繼承異常

有URLError例外:

def visit(self, url, referer=None, data=None): 

    (...) 

    # Return BeautifulSoup instance. 
    try: 
     return BeautifulSoup(self.opener.open(self.request)) 
    # URLError. 
    except urllib.error.URLError as error: 
     return error 

一切工作正常。但是我需要創建這個函數的包裝。

def get_links(self, *args, **kwargs): 

    # Get links with BeautifulSoup. 
    self.links = self.visit(*args, **kwargs).find_all('a') 

Get_links函數也適用,直到有URLError(403,404,無論...)。我怎麼解決這個問題?有遺傳異常嗎?

+0

你得到的錯誤是什麼? – favoretti 2012-08-11 23:12:43

+0

例如當404:它打印錯誤原因,但原因之後:AttributeError:'HTTPError'對象沒有'find_all'屬性。根本沒有內容的搜索。 – 2012-08-11 23:15:18

+0

這很好。你的'visit()'函數捕獲異常並返回一個'URLError'對象,你試圖調用'find_all()',這是沒有的。 – favoretti 2012-08-11 23:16:29

回答

2

visit()功能捕獲的異常,並返回你URLError對象,你打電話find_all()上,它沒有。

在東西線:

self.links = self.visit(*args, **kwargs) 
if not isinstance(self.links, urllib.error.URLError): 
    self.links = self.links.find_all('a') 
else: 
    # Do something with an HTTP Error 

應該給你一個流量的概念。您無法在外部get_links()中捕捉到該例外情況,因爲它已被visit()抓到並且只是返回。

如果你想趕上它get_links(),改變

return error 

raise error 

visit()方法,雖然那麼你會被扔你只需再次捕捉到的異常,我我不確定這是否是你想要的行爲。