一、报错含义:
val=9
def test():
print(val)
val = 6
print(val)
test()
翻译:本地变量xxx引用前没有定义。
二、报错原因
这是Python变量作用域的问题的问题导致的:
- 内部函数,不修改全局变量可以访问全局变量
- 内部函数,修改同名全局变量,则python会认为它是一个局部变量
- 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError
val=9 #val现在是全局变量
def test():
print(val) #引用局部变量,但局部变量未在函数内定义,报局部变量未定义的error
val = 6 #函数内,修改了同名全局变量,则变量val会被认为是局部变量,所以在上一句“print(val)”引用该变量时,被认为是局部变量的val,又没有在引用前定义,所以Unbound-LocalError
print(val)
test()
三、解决方法
如果想在函数里修改同名全局变量的值之前引用该变量,就需要在函数内引用前用global关键字将被认为是局部的变量定义为全局变量。如下:
val=9
def test():
global val #将局部变量再次定义为全局变量
print(val) #可以直接引用全局变量
val = 6 #修改了同名全局变量,变量val会被认为是局部变量,但是在“print(val)”引用该变量之前,将变量又再次定义为全局变量,所以可能正确被引用,且修改的是全局同一个变量
print(val)
test()
print(val) #全局变量已在函数内被修改
打印结果:
9
6
6
如果只是想在函数内使用同名变量,而不改变函数外全局变量的值,则直接在函数内引用该变量前,初始化即可。如下:
val=9
def test():
val = 0 #定义局部变量val
print(val) #引用局部变量
val = 6 #修改局部变量,不会影响到全局变量的值
print(val) #引用局部变量
test()
print(val) #引用全局变量,不受函数内的局部变量影响
打印结果:
0
6
9
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律