繁体   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