簡體   English   中英

如何在Python3.6中處理“ UnboundLocalError”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM