我为解析网站创建了一个小课程。
有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 :(得分: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()
方法中,虽然你会抛出你刚刚抓到的异常,但我不确定这是否是你想要的行为。