VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • 开发中常遇到的Python陷阱和注意点(3)

结果如下:

1
UnboundLocalError: local variable 'num' referenced before assignment

之所以产生这个错误,就是因为我们在var_func中给num变量进行了赋值,所以Python解释器会认为num是var_func作用域的本地变量,但是当代码执行到print "num is :", num语句的时候,num还是未定义。

 

问题二

上面的错误还是比较明显的,还有一种比较隐蔽的错误形式如下:

1
2
3
4
5
6
7
8
9
li = [123]
def foo():
    li.append(4)
    print li
foo()
def bar():
    li +=[5]
    print li
bar()

代码的结果为:

1
2
[1, 2, 3, 4]
UnboundLocalError: local variable 'li' referenced before assignment

在foo函数中,根据Python的作用域解析顺序,该函数中使用了全局的li变量;但是在bar函数中,对li变量进行了赋值,所以li会被当作bar作用域中的变量。

 

对于bar函数的这个问题,可以通过global关键字。

1
2
3
4
5
6
7
8
9
10
11
12
li = [123]
def foo():
    li.append(4)
    print li
    
foo()
def bar():
    global li
    li +=[5]
    print li
    
bar()

相关教程