-1

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

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

4

1 回答 1

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()方法中,尽管您将再次抛出刚刚捕获的异常,但我不确定这是否是您想要的行为。

于 2012-08-11T23:19:18.187 回答