只是一个简单的问题,因为我真的找不到解决问题的简单方法。 有没有办法获得一个意味着是整数的用户输入,但输入一个字符串 程序不会中断,而是显示“错误”
我一直试图通过将字符串转换为整数来解决它,反之亦然,但是我经常得到“无效的文字用于int(),基数为10”错误,或者当它显示“错误”时,它会这样做无限循环。
这是我的代码,只是为了帮助澄清问题
choice = input("Enter your choice: ")
while choice != 3:
if choice == 1:
get_songs()
print
main()
elif choice == 2:
read_songs()
print
main()
else:
print "Invalid choice"
所以基本上我希望else操作适用于字符串以及大于3或小于1的整数。
答案 0 :(得分:9)
但我经常得到“无效的文字对于int()与基础10”错误
你得到一个例外,特别是ValueError
。您可以使用except
块捕获异常。有关详细信息,请参阅您目前使用的任何语言教程,或尝试使用Google except block Python
。
当它显示“错误”时,它会在无限循环中这样做。
当您检测到输入不正确时,您需要在再次尝试循环之前获取新输入。将输入内容放入循环中。除了循环之外,不要使用递归(在main()
内调用main
);你只会这样迷惑自己。因为在循环内部之前没有获得choice
的值,所以当您找到适当的break
值而不是尝试时,更容易显式地choice
退出循环用它控制循环(即在while
条件下测试它)。
我们也可以使用continue
来简化循环结构:我们不是在try
块中完成所有工作,而是将其限制在我们提取数字的部分。当我们没有实际数字时,我们在continue
块中使用except
来跳过循环的其余部分,并且只在我们这样做时才执行剩下的循环。 (毕竟,我们为choice == 1
或choice == 2
调用的代码可能raise ValueError
出于某些完全不同的原因,我们想要做些不同的事情。)
while True:
try:
choice = int(raw_input("Give me a number"))
except ValueError:
print "Could you at least give me an actual number?"
continue
if choice == 1:
do_something()
elif choice == 2:
do_something_else()
elif choice == 3:
break
else:
print "Try a different number"
答案 1 :(得分:0)
由于这个选择总是!= 3,你将得到一个无限循环。 如果它跳到“其他”状态,你应该再次输入。
答案 2 :(得分:0)
这是:我不喜欢让用户在字符串周围输入""
。
ch = raw_input("Enter choice: ")
#ch *is* a string at this point
if ch.isdigit():
choice = int(ch)
else:
print "Invalid choice"
修改(来自评论):
isdigit
可能无法正确处理区域设置编码。在Python 3中,您可以使用isdecimal
代替。 - J.F. Sebastian
答案 3 :(得分:0)
在您的代码中,while
循环应该封装input()
行。然而,以下是一个更清晰的选择:
创建一个获取用户输入的函数:
def getInteger(prompt):
while True:
userIn = input(prompt)
try:
return int(userIn)
except ValueError:
print "Error"