Python3 - 继承异常

时间:2012-08-11 23:10:01

标签: python exception inheritance python-3.x

我为解析网站创建了一个小课程。

有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,无论如何......)。我怎么解决这个问题?是否存在继承异常?

1 个答案:

答案 0 :(得分:2)

您的visit()函数会捕获异常并返回一个URLError对象,您正在调用它find_all(),而该对象没有。{/ p>

以下内容:

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()方法中,虽然你会抛出你刚刚抓到的异常,但我不确定这是否是你想要的行为。