我刚开始编程并尝试写一些东西,但(当然)它失败了.在我遇到真正的问题之后: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方式解决这个问题?或者我应该采取完全不同的方式?
最常用的方法是为测试方法提供参数:
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)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |