输入字符串和整数

时间:2012-05-31 03:25:55

标签: python string input integer 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"

所以基本上我希望else操作适用于字符串以及大于3或小于1的整数。

4 个答案:

答案 0 :(得分:9)

  

但我经常得到“无效的文字对于int()与基础10”错误

你得到一个例外,特别是ValueError。您可以使用except块捕获异常。有关详细信息,请参阅您目前使用的任何语言教程,或尝试使用Google except block Python

  

当它显示“错误”时,它会在无限循环中这样做。

当您检测到输入不正确时,您需要在再次尝试循环之前获取新输入。将输入内容放入循环中。除了循环之外,不要使用递归(在main()内调用main);你只会这样迷惑自己。因为在循环内部之前没有获得choice的值,所以当您找到适当的break值而不是尝试时,更容易显式地choice退出循环用它控制循环(即在while条件下测试它)。

我们也可以使用continue来简化循环结构:我们不是在try块中完成所有工作,而是将其限制在我们提取数字的部分。当我们没有实际数字时,我们在continue块中使用except来跳过循环的其余部分,并且只在我们这样做时才执行剩下的循环。 (毕竟,我们为choice == 1choice == 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"