我试图用完做退出循环,不接受非整数,我做错了什么?
while True:
try:
num = int(input("Enter a number or enter done: "))
if (num % 2) == 0:
print("Number is Even")
elif (num % 2) == 1:
print("Number is Odd")
else:
num == 'done'
break
except:
print ('Invalid Input')
print ('Done')
答案 0 :(得分:3)
因为这一行在这里:
num = int(input("Enter a number or enter done: "))
将您的输入转换为int
。字符串done
无法转换为int
,只会直接显示您的例外情况,而不是您的if .. elif
代码。
在将输入转换为int:
之前,您可以尝试检查done
while True:
try:
num_str = input("Enter a number or enter done: ")
if num_str == 'done':
break
num = int(num_str)
if (num % 2) == 0:
print("Number is Even")
else:
print("Number is Odd")
except:
print('Invalid Input')
print('Done')
答案 1 :(得分:2)
您需要在之前检查输入,然后尝试将其转换为int
。数字永远不能等于'done'
。
不需要elif (num % 2) == 1:
;如果一个数字不均匀,唯一的另一种可能是它很奇怪,所以你可以使用else:
。
将try:
仅放在执行转换的语句周围也好一点。
while True:
response = input("Enter a number or enter done: ")
if response == 'done':
break;
try:
num = int(response)
except:
print ('Invalid Input')
continue
if (num % 2) == 0:
print("Number is Even")
else:
print("Number is Odd")
print ('Done')
答案 2 :(得分:1)
当您键入'done'
时,您的程序会尝试将字符串转换为int
。这会引发一个被捕获的ValueError
。然后循环重新开始。
由于您需要保留用户输入以在'done'
强制转换失败时检查int
是否为try-except
,我建议您不要依赖str.isdigit
阻止,而是使用{{ 1}}而不是。
while True:
answer = input("Enter a number or enter done: ")
if answer.isdigit() and int(answer) % 2 == 0:
print("Number is Even")
elif answer.isdigit() and int(answer) % 2 == 1:
print("Number is Odd")
elif answer.lower() == 'done':
break
else:
print('Invalid input')
print ('Done')
如果您想使用try-except
块,那么您应该具体了解要捕获的异常,否则您可能会捕获表示实际错误的异常,甚至会发现KeyboardInterrupt
错误,这将阻止退出您的程序。
# Good
try:
...
except ValueError:
...
# Bad
try:
...
except:
...