2

我想知道如果用户键入除数字以外的任何内容进行输入,我如何才能让我的代码不崩溃。我以为我的 else 语句会涵盖它,但我得到一个错误。

回溯(最后一次调用):文件“C:/Python33/Skechers.py”,第 22 行,在 run_prog = input() 文件“”,第 1 行,在 NameError 中:未定义名称's'

在这种情况下,我输入了字母“s”。

以下是给我问题的代码部分。程序运行完美,除非你给它字母或符号。

如果可能,我希望它打印“无效输入”而不是崩溃。

是否有与另一个 elif 语句和 isalpha 函数有关的技巧?

while times_run == 0:
    print("Would you like to run the calculation?")
    print("Press 1 for YES.")
    print("Press 2 for NO.")
    run_prog = input()

    if run_prog == 1:
        total()
        times_run = 1

    elif run_prog == 2:
            exit()

    else:
        print ("Invalid input")
        print(" ")

我尝试了一些变体,但没有成功。

elif str(run_prog):
    print ("Invalid: input")
    print(" ")

我感谢任何反馈,即使我需要参考 python 手册的特定部分。

谢谢!

4

3 回答 3

3

与您的想法相反,您的脚本没有在 Python 3.x 中运行。在您系统的某个地方,您安装了 Python 2.x 并且脚本正在其中运行,导致它使用 2.x 的不安全/不适当的input()代替。

于 2013-07-04T00:46:01.373 回答
1

您显示的错误消息表明input()尝试评估键入为 Python 表达式的字符串。这反过来又意味着您实际上并没有使用 Python 3。input仅在 2.x 中这样做。无论如何,我强烈建议你这样做,因为它明确了你想要的输入类型。

while times_run == 0:
    sys.stdout.write("Would you like to run the calculation?\n"
                     "Press 1 for YES.\n"
                     "Press 2 for NO.\n")
    try:
        run_prog = int(sys.stdin.readline())
    except ValueError:
        run_prog = 0

    if not (1 <= run_prog <= 2):
        sys.stdout.write("Invalid input.\n")
        continue

    # ... what you have ...
于 2013-07-04T00:41:50.533 回答
1

你可以这样做:

while times_run == 0:
print("Would you like to run the calculation?")
print("Press 1 for YES.")
print("Press 2 for NO.")
run_prog = input()

if run_prog == 1:
    total()
    times_run = 1

elif run_prog == 2:
        exit()

elif run_prog not in [1,2]:
        print('Please enter a number between 1 and 2.')

如果用户编写s文本Please enter a number between 1 and 2将出现

于 2013-07-04T00:50:47.823 回答