了解Python中的UnboundLocalError

时间:2015-04-18 15:12:36

标签: python python-3.x

您好我是Python的新手。在学习时我遇到了以下代码片段,因为我无法理解代码的行为。 这是第一个案例

#Case 1
x=1
def func():
    x=5
    print(x)

func()
5

这是第二种情况

#Case 2  
x=1
def func():
    print(x) #First print statement
    x=5
    print(x) #Second print statement

func()
UnboundLocalError: local variable 'x' referenced before assignment

这两种情况是相同的,除了第二种情况有一个额外的印刷声明。为什么第二个代码片段的第一个print语句使Python抛出异常?

1 个答案:

答案 0 :(得分:3)

函数外部的x存在,但x也在两个函数中定义为局部变量,您必须在使用它之前定义它。它并不意味着Python将首先使用函数外部的x,然后允许您将x重新定义为局部变量,然后使用本地变量x剩下的功能。

所以区别在于:

def func():
    x=5
    print(x)

def func():
    print(x) #First print statement
    x=5
    print(x) #Second print statement

在两个函数中x都是局部变量,但在第二个函数中,您在该函数中定义它之前尝试使用它。因此错误。