如何解决UnboundLocalError?

Rob*_*ijn 1 python

我刚开始编程并尝试写一些东西,但(当然)它失败了.在我遇到真正的问题之后:UnboundLocalError.所以为了避开你所有的废墟我把代码剥离到这个:

def test():
    try:
        i1 = int(i1)
        i2 = int(i2)
    except ValueError:
        print "you failed in typing a number"

def input(): 
    i1 = raw_input('please type a number \n >')
    i2 = raw_input('please type a number \n >')
Run Code Online (Sandbox Code Playgroud)

然后我写下来:

>>>input()
please insert a number
> 3
please insert a number
> 2 
>>>test()
Run Code Online (Sandbox Code Playgroud)

然后我得到了:

that was not a number
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 7, in test
UnboundLocalError: local variable 'i1' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

我怎样才能以Pythonic方式解决这个问题?或者我应该采取完全不同的方式?

Céd*_*ien 6

最常用的方法是为测试方法提供参数:

def test(i1, i2):
    try:
        i1 = int(i1)
        i2 = int(i2)
    except ValueError:
        print "you failed in typing a number"

def input(): 
    i1 = raw_input('please type a number \n >')
    i2 = raw_input('please type a number \n >')
    test(i1, i2)   # here we call directly test() with entered "numbers"
Run Code Online (Sandbox Code Playgroud)

如果你真的想在交互式提示上测试,你可以这样做(如@FerdinandBeyer评论中所建议的):

def test(i1, i2):
    try:
        i1 = int(i1)
        i2 = int(i2)
    except ValueError:
        print "you failed in typing a number"
    return i1, i2
    
def input(): 
    i1 = raw_input('please type a number \n >')
    i2 = raw_input('please type a number \n >')
    return i1, i2
Run Code Online (Sandbox Code Playgroud)

然后,提示:

>>>var1, var2 = input()
please insert a number
> 3
please insert a number
> 2 
>>>test(var1, var2)
Run Code Online (Sandbox Code Playgroud)