输入字符串和整数

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的整数.

Kar*_*tel 9

但我经常得到"无效的文字为int()与基础10"错误

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

当它显示"错误"时,它会在无限循环中这样做.

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

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