第二个输入在没有我选择的情况下取“”

时间:2018-02-21 16:14:11

标签: python python-3.x

我的代码就是这样:

x = int(input("Enter a number: "))
y = int(input("Enter a second number: "))
print('The sum of ', x, ' and ', y, ' is ', x+y, '.', sep='')

当我输入任何数字时,我收到此错误:

Enter a number:15

Enter a second number: Traceback (most recent call last):
 File "C:/Users/mgt4/PycharmProjects/Beamy/test.py", line 5, in <module>
  y = int(input("Enter a second number: "))
ValueError: invalid literal for int() with base 10: ''

据我所知,它认为输入的第二个数字是一个空格,但我不知道为什么以及如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

如果int(input("whatever"))返回无法解释为int的内容,

ValueError确实会引发input()。作为一般规则,您永远不应该信任用户输入(无论它们来自哪里 - input(),命令行参数,sys.stdin,文本文件,HTTP请求等等)并始终清理并验证它们。

对于您的用例,您需要围绕int(input(...))调用的包装函数:

def asknum(q):
    while True:
        raw = input(q)
        try:
            return int(raw.strip())
        except ValueError:
            print("'{}' is not a valid integer".format(raw)


num1 = asknum("enter an integer")

您可以通过提供验证功能使其更通用:

def ask(q, validate):
    while True:
        raw = input(q)
        try:
            return validate(raw.strip())
        except ValueError as e:
            print(e)

在这种情况下,您只需使用int类型作为验证功能:

num1 = ask("enter an integer", int)

答案 1 :(得分:0)

尝试将您的代码转换为更通用的代码:

REPEATS = 2 
  counter = 1 
  values = []
  while True:
      value = raw_input("Enter number {}: ".format(counter))
      try:
          number = int(value)
      except ValueError:
          print("Entered value '{}' isn't a number".format(value))
          continue
      counter += 1
      values.append(number)
      if counter > REPEATS:
          break

  print('The sum of values {} is {}'.format(", ".join([str(v) for v in values]), sum(values)))

REPEATS将是添加值的数量。

Example of output:
Enter number 1: 56
Enter number 2: 88
The sum of values 56, 88 is 144