我的代码如下所示,属于Class:
def getHtmlResponse(self, inUrl):
while True:
try:
res = urllib.request.urlopen(inUrl)
html = res.read()
soup = BeautifulSoup(html, 'html.parser')
except urllib.error.URLError:
pass
break
return soup
有时,我会收到如下错误消息:
File "/Users/chongwonshin/PycharmProjects/Crawler_test/Content_crawler.py", line 99, in getHtmlResponse
return soup
UnboundLocalError: local variable 'soup' referenced before assignment
此错误在多次运行中仅发生几次。 我该如何处理这类错误?
答案 0 :(得分:1)
汤将不会被初始化。因此,除了阻止之外,您可以再次初始化soup
。
def getHtmlResponse(self, inUrl):
while True:
try:
res = urllib.request.urlopen(inUrl)
html = res.read()
soup = BeautifulSoup(html, 'html.parser')
except urllib.error.URLError:
soup = ''
pass
break
return soup
答案 1 :(得分:0)
让我们简化您的代码。由于您始终break
不在循环中,因此循环实际上是无操作且可以删除:
def getHtmlResponse(self, inUrl):
try:
res = urllib.request.urlopen(inUrl)
html = res.read()
soup = BeautifulSoup(html, 'html.parser')
except urllib.error.URLError:
pass
return soup
现在考虑如果BeautifulSoup()
调用抛出异常会发生什么:soup
的赋值永远不会发生,但代码仍会尝试返回它。
如果发生这种情况,您需要决定要做什么。返回一个不存在的对象显然不是一种选择。例如,您可以选择返回None
并相应地修改您的代码。