我试图通过输入'退出'来退出以下代码块。由于将输入语句格式化为整数,这会导致错误。我能够利用尝试摆脱错误,但是我仍然无法退出'退出'要被识别为输入,因为所有非整数输入都会产生代码块底部的else print语句,包括退出'。
除了ValueError
之外,有没有办法对变量进行评估?
import sys
import pdb
from random import choice
random1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
random2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
while True:
print("To exit this game type: 'exit'")
num1 = choice(random2)
num2 = choice(random1)
try:
answer = int(input("What is {} times {}? :" .format(num1,\
num2)))
if answer == num1 * num2:
print("Correct Choice!")
else:
print("WRONG")
except ValueError:
if answer == 'exit':
print("Now exiting the game")
sys.exit()
else:
print("that answer is not valid try again")
`
答案 0 :(得分:1)
如果ValueError
被调用int
(最有可能的地方),则answer
将不会为其分配新值。怎么可能呢?在任何分配发生之前,尝试将"exit"
(或其他内容)转换为int
失败了。要解决此问题,您需要尝试以下方式:
# Get the raw string
answer = input("What is {} times {}? :" .format(num1, num2))
# Convert to int; if it fails, the raw string is left in answer
answer = int(answer)
这样,如果answer
提升int
,原始字符串仍然在ValueError
。
答案 1 :(得分:0)
我看到的最快捷方式是分割您的输入行:
raw_answer = input("What is {} times {}? :" .format(num1, num2))
try:
answer = int(raw_answer)
except ValueError:
if raw_answer == 'exit':
print("Now exiting the game")
sys.exit()
else:
print("that answer is not valid try again")
这样您就可以保留输入的原始答案,同时仍然使用ValueError退出程序。
或者,您可以先检查raw_answer == 'exit'
,然后再使用int()
...