为什么退出代码会给出 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:')
代码如下:
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:')