首頁>Club>
怎麼導致這個異常的呢,又怎麼解決這個異常
4
回覆列表
  • 1 # 小鳴同學

    舉個栗子:

    >>> x = 10>>> def bar():... print(x)>>> bar()10

    作品,但這個程式碼:

    >>>>>> x = 10>>> def foo():... print(x)... x += 1

    導致UnboundLocalError:

    >>>>>> foo()Traceback (most recent call last): ...UnboundLocalError: local variable "x" referenced before assignment

    這是因為,當您對作用域中的變數進行賦值時,該變數將變為該作用域的區域性變數,並在外部作用域中對任何具有相似名稱的變數進行遮蔽。由於foo中的最後一個語句賦予一個新值 ,因此編譯器將其識別為區域性變數。因此,當早期嘗試列印未初始化的區域性變數併產生錯誤時。

    在上面的例子中,你可以透過宣告它是全域性的來訪問外部範圍變數:

    >>>>>> x = 10>>> def foobar():... global x... print(x)... x += 1>>> foobar()10

    這個顯式宣告是為了提醒你(不同於類和例項變數的表面上類似的情況),你實際上是在修改外部變數的值:

    >>>>>> print(x)11

    您可以使用 關鍵字在巢狀範圍內做類似的事情:

    >>>>>> def foo():... x = 10... def bar():... nonlocal x... print(x)... x += 1... bar()... print(x)>>> foo()1011

  • 中秋節和大豐收的關聯?
  • 玉壺冰心是什麼意思,有什麼典故?