local variable 'xxx' referenced before assignment

local variable 'xxx' referenced before assignment

 

定义了一个全局变量 createTableFlag ,Python的一个函数里面引用这个变量,并改变它的值,

结果报错local variable 'xxx' referenced before assignment,如:

  • local variable 'createTableFlag' referenced before assignment  

代码如下:

createTableFlag = True

##########################################
# @function 创建记录压缩信息的表单
# @description 如果图片信息存在于数据库中,则表明图片被压缩过,不需要再次压缩
##########################################
def createTableCompressLog():
    if createTableFlag :
        try:
            create_tb_cmd='''
            create table compresslog (id varchar(64) primary key , name varchar(64) UNIQUE , path varchar(1024) UNIQUE , size integer , org_size integer , status integer)
            '''
            #主要就是上面的语句
            cu.execute(create_tb_cmd) 
            createTableFlag = False
        except:
            logging.info(" table compresslog maybe exist , create table compresslog fail ")
            createTableFlag = False

错误的意思就是createTableFlag这个变量在引用前还没有定义,这上面不是定义了么?但是后来我把createTableFlag= True这句去掉就好了。后来想起python中有个global关键字是用来引用全局变量的

createTableFlag = True

##########################################
# @function 创建记录压缩信息的表单
# @description 如果图片信息存在于数据库中,则表明图片被压缩过,不需要再次压缩
##########################################
def createTableCompressLog():
    #全局变量 创建表单标识
    global createTableFlag 
    
    if createTableFlag :
        try:
            create_tb_cmd='''
            create table compresslog (id varchar(64) primary key , name varchar(64) UNIQUE , path varchar(1024) UNIQUE , size integer , org_size integer , status integer)
            '''
            #主要就是上面的语句
            cu.execute(create_tb_cmd) 
            createTableFlag = False
        except:
            logging.info(" table compresslog maybe exist , create table compresslog fail ")
            createTableFlag = False

原来在python的函数中和全局同名的变量,如果你有修改变量的值就会变成局部变量,在修改之前对该变量的引用自然就会出现没定义这样的错误了,如果确定要引用全局变量,并且要对它修改,必须加上global关键字。

 


 

转载来源:https://yq.aliyun.com/articles/629346

你可能感兴趣的:(python)