local variable ‘x‘ referenced before assignment错误

前言:报local variable ‘x‘ referenced before assignment错误 通常是两种原因: 一是函数试图修改全局变量;二是内部函数试图修改外部函数变量。
先介绍两个概念:
1.局部变量是定义在函数内部定义并使用的变量,它只在函数内部有效。
2.全局变量是定义在函数外部,它既可以在各函数的外部使用,也可在各函数内部使用。

情况一:函数欲修改全局变量

声明在最前面的变量就是全局变量,通俗讲就是公用的,所以func1在 ‘小岳岳’ 后面拼接 ‘唱歌’ 字符串时没有修改权限当然会报错;但func2中的变量name是局部变量,它自己可以随便修改

name = '小岳岳' # 全局变量,声明在函数外(公用的)


def func1():
    name += '唱歌'
    print(name)      
func1() #--> 系统报错:local variable ‘name‘ referenced before assignment


def func2():
    name = '小月月' # 局部变量,声明在函数内(自用的)
    name += '大美女'
    print(name) 
func2() #--> 小月月大美女
解决方法:用 global 1 声明name为全局变量
name = '小岳岳'  


def func1():
    global name 
    name += '唱歌'
    print(name)


func1()  # --> 小岳岳唱歌

情况2:内部函数欲修改外部函数变量

这种情况可以理解成,i 是func的局部变量,但对in_func则是全局变量

def func():
    i = 99

    def in_func():  # 内部函数
        i += 1
        print(i)
        
    in_func()

func()
解决办法是加 nonlocal 2

在这里插入图片描述

本人能力能力有限,希望能帮到你


  1. global是全局、全面的意思 ↩︎

  2. local是本地、局部的意思,nonlocal就是反义词 ↩︎


版权声明:本文为qq_41658123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。