![](/img/trans.png)
[英]UnBoundLocalError: local variable referenced before assignment (Python)
[英]Python -local variable '' referenced before assignment
我正在嘗試找出我遇到的一些問題。 我已經為此處的示例編寫了小程序(我將在實際示例中實現該解決方案:))
因此,我有3個文件一個-哪個是主測試-哪個是我運行的測試CounterTest-哪個具有帶有def的類
一:
def main():
CounterTest=1
execfile("c:\\111\\Test.py")
if __name__ == '__main__':
main()
測試:
from CounterTest import *
print "THIS IS THE TEST"
CallClass=CounterTest1()
CallClass.CounterPlus()
反測試:
class CounterTest1():
def CounterPlus(self):
CounterTest +=1
print CounterTest
場景:我運行執行文件Test的“一個”(所有這些都發生在main def中)在“ Test”中,我調用class和def -in def我們對+1進行了定義,這是在“一個”文件中定義的。
我收到“分配前已引用本地變量'CounterTest'”
我已經嘗試了一切,但無濟於事
申請,
謝謝
它的長短是你不能。 如果我正確了解您的流程,則您是:
1.運行main.py
2.在函數中定義變量,使其不全局
def main():
CounterTest = 1 # <-- right here
3.從其他文件執行代碼
execfile("...")
4.導入第三文件
from CounterTest import *
5.嘗試在第一個文件中修改全局
...
CounterTest += 1
你不能那樣做。 距離這三個級別的“不”。
main.py
的CounterTest
不是全局的,因此僅在def main
的作用域內可用。 test.py
也不能在未顯式傳遞它們的情況下訪問main.py
的全局變量。 execfile(path, globals_dict, locals_dict)
),並且它們成為test.py
內部的全局變量, CounterTest.py
也不允許查看test.py
的全局變量。 您甚至無法四處尋找使之正常的事情。 您需要對值進行參數化,並且需要停止使用全局變量。 這整個事情應該是:
# counter.py
class Counter(object):
"""Counter is knows how to add to itself"""
def __init__(self, value=1):
self.__value = value
def increment(self):
self.__value += 1
@property
def value(self):
return self.__value
# main.py
import counter
c = counter.Counter() # initializes at 1
print(c.value) # 1
c.increment()
print(c.value) # 2
# now SHARE that instance of c!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.