【Python】UnboundLocalError: local variable 'l' referenced before assignment

简介:

01  在程序中设置的sum_Logical属于全局变量,而在函数 calculate中没有sum_Logical的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样python就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR 或者 Unbound-LocalError,这取决于python 版本。)
02     如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum_Logical的定义和赋值,所以报错。
03  从下面两个程序看 单独的访问或者修改全局变量,并不报错~
04  #!/usr/bin/python
05  import sys
06  sum=5
07  def add(a=1,b=3):
08       print a,b
09       print sum --仅仅访问  
10  add(4,8)
11  print sum 
12  [root@rac3 python]# python local.py
13  4 8
14  5
15  
16  #!/usr/bin/python
17  import sys
18  sum=5
19  def add(a=1,b=3):
20       print a,b
21       sum=b+a  --在函数内部修改
22       print sum
23  add(4,8)
24  [root@rac3 python]# python local.py 
25  4 8
26  12
27  下面的程序就会因为“如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum_Logical的定义和赋值,所以报错”
28  #!/usr/bin/python
29  import sys
30  sum=5
31  def add(a=1,b=3):
32       print a,b
33       print sum 
34       sum=b+a
35       print sum
36  add(4,8)
37  print sum
38  [root@rac3 python]# python local.py 
39  4 8
40  Traceback (most recent call last):
41    File "local.py", line 10, in ?
42      add(4,8)
43    File "local.py", line 6, in add
44      print sum
45  UnboundLocalError: local variable 'sum' referenced before assignment
46  遇到在程序中访问全局变量并且要修改全局变量的值的情况可以使用:global 关键字,在函数中声明此变量是全局变量
47  #!/usr/bin/python
48  import sys
49  sum=5
50  print '改变之前:sum=',sum
51  def add(a=1,b=3):
52       global sum
53       print 'add 函数中:sum=',sum
54       sum=b+a
55       print '函数中改变之后:sum= ',sum
56  add(4,8)
57  print '改变之后 sum=',sum
58  [root@rac3 python]# vim local.py
59  改变之前:sum= 5
60  add 函数中:sum= 5
61  函数中改变之后:sum=  12
62  改变之后 sum= 12

相关文章
|
2月前
|
存储 安全 Python
什么是Python中的线程局部存储(Thread Local Storage)?
【2月更文挑战第3天】【2月更文挑战第6篇】
|
11月前
|
存储 Python
Python threading Local()函数用法:返回线程局部
Python threading Local()函数用法:返回线程局部
|
Python
Python3不需要uuid:导入/usr/local/lib/python3.x/site-packages/uuid.py提示if not 0 time_low 32L错误
Python3不需要uuid:导入/usr/local/lib/python3.x/site-packages/uuid.py提示if not 0 time_low 32L错误
79 0
|
程序员 Python
笨办法学 Python--跟书练习四~变量(variable)和命名
笨办法学 Python--跟书练习四~变量(variable)和命名
笨办法学 Python--跟书练习四~变量(variable)和命名
|
Python
python小知识点-exec的local
python小知识点-exec的local
171 0
|
Python
Python 技术篇-引用全局变量提示:local variable referenced before assignment. 问题解决办法
Python 技术篇-引用全局变量提示:local variable referenced before assignment. 问题解决办法
1569 0
|
关系型数据库 MySQL Python
python py_innodb_page_info.py -v /usr/local/var/mysql/ibdata1
mylib.py #encoding=utf-8 import os import include from include import * TABLESPACE_NAME='D:\\mysql_data\\test\\t.
747 0
|
Python 开发工具
【Python】UnboundLocalError: local variable 'l' referenced before assignment
  01 在程序中设置的sum_Logical属于全局变量,而在函数 calculate中没有sum_Logical的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样python就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR 或者 Unbound-LocalError,这取决于python 版本。
1317 0
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
Python:探索编程之美
Python:探索编程之美
9 0