[英]How can I handle “UnboundLocalError” in Python3.6?
我有下面的代碼,其中一部分是類:
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
在多次運行中,此錯誤僅發生幾次。 如何處理此類錯誤?
如果try塊的前兩行出現異常,湯將不會初始化。 因此,除了塊狀,您可以再次初始化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
讓我們簡化您的代碼。 由於您總是會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
並相應地修改代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.