我的代码就是这样:
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: ''
据我所知,它认为输入的第二个数字是一个空格,但我不知道为什么以及如何解决这个问题。
答案 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