簡體   English   中英

分配前已引用Python -local變量

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

你不能那樣做。 距離這三個級別的“不”。

  1. main.pyCounterTest不是全局的,因此僅在def main的作用域內可用。
  2. 即使它是全局的, test.py也不能在未顯式傳遞它們的情況下訪問main.py的全局變量。
  3. 即使您顯式傳遞了它們(使用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.

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