Python UnboundLocalError: local variable 'xxx' referenced before assignment 解决方法
一、报错含义:
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
Python UnboundLocalError: local variable 'xxx' referenced before assignment 解决方法的更多相关文章
- python:UnboundLocalError: local variable 'xxx' referenced before assignment
近来一直都在学习python语言,偶然在伯乐在线看到2017年京东C/C++的面试题.就打算用python+ST3 IDE顺便敲下面试题代码. 原题 C语言: #include <stdio.h ...
- python: local variable 'xxx' referenced before assignment
问题发现 xxx = 23 def PrintFileName(strFileName): if xxx == 23: print strFileName xxx = 24 PrintFileName ...
- UnboundLocalError: local variable ‘xxx‘ referenced before assignment
原因 在Python函数中调用了某个和全局变量同名的局部变量,导致编译器不知道此时使用的是全局变量还是局部变量 a = 3 def func(): a+=3 func() UnboundLocalEr ...
- Python问题:UnboundLocalError: local variable 'xxx' referenced before assignment
参考链接: http://blog.csdn.net/onlyanyz/article/details/45009697 https://www.cnblogs.com/fendou-999/p/38 ...
- 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assignment
闭包(lexical closure) 什么是闭包前面已经说过了,但是由于遗留问题,所以单独作为一个章节详解讲解下 不多说,看例子: def funx(x): def funy(y): return ...
- [合集]解决Python报错:local variable 'xxx' referenced before assignment
a = 1 def use(): print(a) #输出1 引用不会报错 a = 1 def use(): a = 3 print(a) #输出 3 重新赋值也不会报错. 局部变量会优先在函数内部去 ...
- _markupbase.py if not match: UnboundLocalError: local variable 'match' referenced before assignment,分析Python 库 html.parser 中存在的一个解析BUG
BUG触发时的完整报错内容(本地无关路径用已经用 **** 隐去): **************\lib\site-packages\bs4\builder\_htmlparser.py:78: U ...
- 解决Python报错:local variable 'xxx' referenced before assignment(引)
解决Python报错:local variable 'xxx' referenced before assignment(引) 解决Python报错:local variable 'xxx' refe ...
- local variable 'xxx' referenced before assignment
这个问题很囧,在外面定义了一个变量 xxx ,然后在python的一个函数或类里面引用这个变量,并改变它的值,结果报错local variable 'xxx' referenced before as ...
随机推荐
- Effective C++ 读书笔记 名博客
https://www.cnblogs.com/harlanc/tag/effective%20c%2B%2B/default.html?page=3
- SQL实战——04. 查找所有已经分配部门的员工的last_name和first_name以及dept_no (一个逗号引发的血案)
查找所有已经分配部门的员工的last_name和first_name以及dept_noCREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_ ...
- 00 what is C Programming?C编程是什么?
C语言简介 C is a programming language that lets us give a computer very specifio commands. C语言是一种编程语言,它让 ...
- 下载 Oracle Database XE 11gR2
操作系统:Windows 10 x64 第一节:下载 Oracle Database XE 11gR2 第二节:安装.验证安装 Oracle Database XE 11gR2 第三节:Oracle ...
- 【题解】Ehab the Xorcist
\(\color{red}{Link}\) \(\color{blue}{\text{Solution:}}\) 题目要求构造一个最短的序列,使得异或和为\(u\),数列和为\(v\). 那么,因为是 ...
- vue 项目打包后静态资源加载不到
1, 2,
- BigInteger和BigDecimal
BigInteger BigInteger的作用是对整数做计算,一般的使用String类型初始化BigInteger,它除了封装了基本的加减乘除运算外还提供了signum(),abs()等函数,使用方 ...
- lumen-ioc容器测试 (2)
lumen-ioc容器测试 (1) lumen-ioc容器测试 (2) lumen-ioc容器测试 (3) lumen-ioc容器测试 (4) lumen-ioc容器测试 (5) lumen-ioc容 ...
- laravel服务容器 转
laravel框架底层解析 本文参考陈昊<Laravel框架关键技术解析>,搭建一个属于自己的简化版服务容器.其中涉及到反射.自动加载,还是需要去了解一下. laravel服务容器 建立项 ...
- 自定义view的drawRoundRect模拟进度条
主要方法发介绍 1:drawRoundRect参数介绍 drawRoundRect(l,t,r,b,rx,ry,paint)里面的参数可以有两种: 1:前四个参数(l,t,r,,b)分别是矩形左边距离 ...