if子句的异常处理失败



如果输入与y或n不同,则应调用异常。我原以为这是一项非常简单的任务,但它失败了。如果输入不是y或n,则根本不执行任何操作。我在这里错过了什么?

rep = str(input('type Y or N: '))
try:
if rep.lower() == 'y':
print('Y was typed')
if rep.lower() == 'n':
print('N was typed')
except:
print ('Neither N nor Y was typed')

我对代码有两条评论:

  1. 首先,不需要使用str((显式强制转换输入变量,因为默认情况下input((函数返回一个字符串,这意味着即使您输入rep=1,该值也将是一个字符串。

  2. 您的代码不会像上面的人提到的那样生成异常,因为您插入的任何输入都将被视为字符串。话虽如此,甚至没有必要尝试。。。捕获块,这意味着只有正常的"捕获块";如果…elif…else"梯子会起作用的。

您的代码不会引发在这种情况下可以捕获的异常。使用if-elif-else:而不是使用try-except

rep = str(input('type Y or N: '))
if rep.lower() == 'y':
print('Y was typed')
elif rep.lower() == 'n':
print('N was typed')
else:
print('Neither N nor Y was typed')

此代码只是针对两种不同的情况(if分支和elif分支(检查rep。如果都不是True,则代码进入else分支。

在本文档中阅读有关此类if语句如何工作的更多信息。

在这种情况下,您不需要try/except,因为不会引发异常:

rep = input('type Y or N: ')
rep_lower = rep.lower()
if rep_lower == 'y':
print('Y was typed')
elif rep_lower == 'n':
print('N was typed')
else:
print ('Neither N nor Y was typed')

最新更新