Python:为什么我得到ValueError:解压缩的值太多了

时间:2012-08-01 18:27:47

标签: python

我不确定为什么会收到此错误。我已阅读并尝试过不同的东西,但它无效。

def product():

    y, x= raw_input('Please enter two numbers: ')
    times = float(x) * int(y)
    print 'product is', times
product()

我做错了什么?非常感谢你

2 个答案:

答案 0 :(得分:4)

raw_input返回单个字符串。在你正在做的时解压缩参数,它需要返回两件事。

你可以这样做:

y, x = raw_input('Please enter two numbers (separated by whitespace): ').split(None,1)

请注意,这仍然有点脆弱,因为用户可以输入类似“2 1 3”的字符串。解压缩工作没有异常,但在尝试将“1 3”转换为整数时会出现阻塞。执行这些操作最强大的方法是通过try/except块。我就是这样做的。

while True: #try to get 2 numbers forever.
   try:
      y, x = raw_input("2 numbers please (integer, float): ").split()
      y = int(y)
      x = float(x)
      break  #got 2 numbers, we can stop trying and do something useful with them.
   except ValueError:
      print "Oops, that wasn't an integer followed by a float.  Try again"

答案 1 :(得分:0)

@ mgilson的回答是正确的;除非有人输入三个数字,否则您将获得相同的ValueError例外。

所以,这个替代版本捕获了:

numbers = raw_input('Please enter only two numbers separated by a space: ').split()
if len(numbers) > 2:
   print 'Sorry, you must enter only two numbers!'
else:
   x,y = numbers