您的位置:首页 > 编程语言 > Python开发

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

2013-08-16 16:25 681 查看
01在程序中设置的sum_Logical属于全局变量,而在函数calculate中没有sum_Logical的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样python就在全局变量中找这个变量,如果找不到抛出异常(NAMEERROR或者Unbound-LocalError,这取决于python版本。)

02 如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum_Logical的定义和赋值,所以报错。

03从下面两个程序看单独的访问或者修改全局变量,并不报错~

04#!/usr/bin/python

05importsys

06sum=5

07defadd(a=1,b=3):

08 printa,b

09 printsum--仅仅访问

10add(4,8)

11printsum

12[root@rac3python]#
python local.py

1348

145

15

16#!/usr/bin/python

17importsys

18sum=5

19defadd(a=1,b=3):

20 printa,b

21 sum=b+a --在函数内部修改

22 printsum

23add(4,8)

24[root@rac3python]#
python local.py

2548

2612

27下面的程序就会因为“如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有sum_Logical的定义和赋值,所以报错”

28#!/usr/bin/python

29importsys

30sum=5

31defadd(a=1,b=3):

32 printa,b

33 printsum

34 sum=b+a

35 printsum

36add(4,8)

37printsum

38[root@rac3python]#
python local.py

3948

40Traceback(mostrecentcalllast):

41 File"local.py",line10,in?

42 add(4,8)

43 File"local.py",line6,inadd

44 printsum

45UnboundLocalError:localvariable'sum'referencedbeforeassignment

46遇到在程序中访问全局变量并且要修改全局变量的值的情况可以使用:global关键字,在函数中声明此变量是全局变量

47#!/usr/bin/python

48importsys

49sum=5

50print'改变之前:sum=',sum

51defadd(a=1,b=3):

52 globalsum

53 print'add
函数中:sum=',sum

54 sum=b+a

55 print'函数中改变之后:sum=
',sum

56add(4,8)

57print'改变之后
sum=',sum

58[root@rac3python]#
vim local.py

59改变之前:sum=5

60add函数中:sum=5

61函数中改变之后:sum= 12

62改变之后sum=12
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐