【问题标题】:Error in the python scriptpython脚本中的错误
【发布时间】:2011-01-21 23:49:49
【问题描述】:

我有这个简单的python 脚本,其中myvar1 可以在generate() 函数中访问,但不能在copy() 函数中访问。需要帮助找出错误:

#!/usr/bin/python

import os, time

def Test(tcid,descr,iterations,filsz):

        def setup():
                print "entering set up\n"
                global myvar1, myvar2

                myvar1 = 1.0
                myvar2 = os.getcwd()

        def generate():
                print "entering generate\n"
                print "in generate", myvar1, myvar2

        def copy():

           print "in copy", myvar1, myvar2
           myvar1 += 5.0



        setup()
        generate()

        for loopcount in range(5):
           loopcount = loopcount + 1
           copy()



if __name__ == "__main__":
        Test('test','simple test',2,10)

错误:

Traceback(最近一次调用最后一次): 文件“./pyerror.py”,第 35 行,在 测试('测试','简单测试',2,10) 文件“./pyerror.py”,第 30 行,在测试中 复制() 文件“./pyerror.py”,第 20 行,副本 打印“副本”,myvar1,myvar2 UnboundLocalError:赋值前引用了局部变量“myvar1”

【问题讨论】:

标签: python


【解决方案1】:

在函数中覆盖全局的任何地方都需要globalsetupmyvar1 设置为全局变量,但您将其用作未设置的局部变量。因此“赋值前引用的局部变量'myvar1'”

def copy():
    global myvar1
    print "in copy", myvar1, myvar2
    myvar1 += 5.0

如果您正在阅读建议定期使用 global 的教程,请将其扔掉,烧掉它并从另一个开始。

【讨论】:

    【解决方案2】:

    copy() 函数中,myvar1 没有声明为全局,而是在语句myvar1 += 5.0 中赋值。这隐含地使myvar1 成为局部变量。函数第一行的 print 语句也尝试访问名为 myvar1 的局部变量,但这样的局部变量还不存在。

    局部变量是静态确定的,即在编译时。当copy()被Python编译时,myvar1被标记为整个函数体的局部变量。查看触发此错误的最简单代码可能会有所启发:

    def f():
        print x
        x = 5
    x = 3
    f()
    

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 2020-09-22
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多