为什么退出代码会给出 ValueError?

Why does Exit code give a ValueError?

代码如下:

print('Type something you idiot:')
while True:
    spam = str(input())
    if spam == '1':
        print('Hello')
    elif spam == '2':
        print('Howdy')
    elif int(spam) > 2 and int(spam) > 1:
        print('Greetings!')
    elif str(spam) == 'exit':
        sys.exit()
    else:
        print('Type a positive # bruh')
    print('Type again you dumdum:')

错误如下:

exit
Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
    start(fakepyfile,mainpyfile)
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
    exec(open(mainpyfile).read(),  __main__.__dict__)
  File "<string>", line 9, in <module>
ValueError: invalid literal for int() with base 10: 'exit'

[Program finished]

其他:

我尝试用谷歌搜索最后一个错误行,但它似乎与我的问题无关,与 float 和所有问题有关。 我希望程序在我键入 exit 时退出,但出现该错误。 所有其他事情似乎都有效(1、2、3、-1)

另一件不起作用的事情是输入“退出”以外的内容。我收到相同的错误消息。 花了很多时间试图修复它无济于事。 请帮忙,谢谢。

当您键入 'exit' 时,将评估 if 语句中第三个子句的条件。即int(spam) > 2 and int(spam) > 1。但是,如果 spam = 'exit',则 spam 无法转换为 int,因此会出现错误。

重新排列 if 语句中的子句是最简单的解决方案。

print('Type something you idiot:')
while True:
    spam = str(input())
    if spam == '1':
        print('Hello')
    elif spam == '2':
        print('Howdy')
    elif str(spam) == 'exit':
        sys.exit()
    elif int(spam) > 2 and int(spam) > 1:
        print('Greetings!')
    else:
        print('Type a positive # bruh')
    print('Type again you dumdum:')

现在,int(spam) > 2 and int(spam) > 1 仅在 str(spam) != 'exit' 适合您期望的(有限)输入时才被评估。

您不能将整数与字符串进行比较。所以比较前先检查字符串是否为整数:

print('Type something you idiot:')
while True:
    spam = str(input())
    if spam == '1':
        print('Hello')
    elif spam == '2':
        print('Howdy')
    elif spam.isdigit() and int(spam) > 1:
        print('Greetings!')
    elif str(spam) == 'exit':
        sys.exit()
    else:
        print('Type a positive # bruh')
    print('Type again you dumdum:')

如果输入的不是数字或“退出”,这将阻止它掉落。

如前所述L.Grozinger“退出比赛”的位置很重要。

您还可以添加 ValueError 异常 try/catch 来修复错误的用户输入...

import sys

print('Type something you idiot:')
while True:
    spam = str(input())
    print(spam)
    try:
        if spam == '1':
            print('Hello')
        elif spam == '2':
            print('Howdy')
        elif spam == "exit":
            sys.exit()
        elif int(spam) > 2 and int(spam) > 1:
            print('Greetings!')

    except ValueError:
        print('Type again you dumdum:')