func中的Python局部变量

时间:2018-08-03 05:46:39

标签: python

def test(a):
    if a>1:
        x=0
    elif a<1:
        y=1
    else:
        x=2
    print(x)
    return 0

为什么test(2)可以,但是test(0)会引发以下错误?

local variable 'x' referenced before assignment

我猜是何时定义了test(2) x,但是没有定义运行test(0) x,但是还想了解更多原因

3 个答案:

答案 0 :(得分:1)

您几乎可以自己回答。如果a为0,则elif a<1为true,因此仅定义了y

答案 1 :(得分:0)

由于使用test(0)函数test()仅设置变量y而不设置变量x,而最后您无条件打印x,导致UnboundLocalError例外。

由于您根本没有使用y,因此看来它实际上是一个错字,并且您打算在那里将x设置为1,所以将代码更改为:

def test(a):
    if a>1:
        x=0
    elif a<1:
        x=1
    else:
        x=2
    print(x)
    return 0

答案 2 :(得分:0)

那是因为您没有在函数中初始化变量。

当您拥有test(0)时,满足第二个条件elif a<1: y=1。但是随后您尝试打印甚至没有定义的x,并且解释器不知道它是什么。

def test(a):
...:     if a>1:
...:         x=0
...:     elif a<1:
...:         x=1
...:     else:
...:         x=2
...:     print(x)
...:     return 0

这不会引发错误。