Jer*_*ise 0 python string integer input raw-input
只是一个简单的问题,因为我真的找不到解决我问题的简单方法.有没有办法获得一个意味着整数的用户输入,但是当输入一个字符串时,程序不会中断,而是显示"错误"
我一直试图通过将字符串转换为整数来解决它,反之亦然,但我经常得到"无效的文字对于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"
Run Code Online (Sandbox Code Playgroud)
所以基本上我希望else操作适用于字符串以及大于3或小于1的整数.
但我经常得到"无效的文字为int()与基础10"错误
你得到一个例外,特别是a 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"
Run Code Online (Sandbox Code Playgroud)