[英]UnboundLocalError for variable imported from settings.py
我有一個文件settings.py,其中定義了以下變量:
DEBUG_MODE = True
WRAP_UP = False
我正在使用以下命令將設置導入到腳本中:
from settings import *
我可以毫無問題地運行它:
if(DEBUG_MODE):
# Do something
但是當我運行這個:
if(WRAP_UP == False):
# Do something
它給了我以下錯誤:
UnboundLocalError: local variable 'WRAP_UP' referenced before assignment.
為什么一個變量起作用而另一個變量不起作用? 我該如何解決?
在Python中,在函數內部,如果您在函數中的任何位置分配了未明確聲明的global
變量或非nonlocal
變量(閉包)的變量,則將其視為局部變量;如果未分配給變量,則將其視為nonlocal
變量(閉包的,全局變量或內置變量) 。
因此,假設您from settings import *
全局from settings import *
(如果不是,則問題更大……),這將創建名為DEBUG_MODE
和WRAP_UP
全局變量,因此您可以執行以下操作:
def spam():
if DEBUG_MODE:
# Do something
……而且行得通。 但是,如果您這樣做:
def eggs():
if WRAP_UP:
# Do something
WRAP_UP = True
……那是行不通的。 賦值意味着eggs
具有一個名為WRAP_UP
的局部變量,該局部變量隱藏了相同名稱的全局變量。 因此,第一行正在嘗試訪問該本地變量,該變量尚無值。
該解決方案是一個顯式的global
語句,即使有賦值,它也會強制eggs
使用全局變量:
def eggs():
global WRAP_UP
if WRAP_UP:
# Do something
WRAP_UP = True
當然,這是假設您希望 eggs
重新分配全局對象,但是我懷疑那是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.