为什么Python代码中if判断不成立时try语句仍会执行?
问题根因
你遇到的问题和try语句无关,核心是if判断的语法逻辑写错了:
你编写的if Answer == "y" or "n":并不等价于「判断Answer的值是y还是n」,Python会把这个表达式拆成两部分判断:
- 第一部分:
Answer == "y"的布尔值 - 第二部分:单独判断字符串
"n"的布尔值
因为非空字符串的布尔值恒为True,所以无论你输入什么内容,整个if条件的结果永远是True,会直接把decisão设为True并执行break。
正确的判断写法可选以下两种:
# 完整写两次等值判断 if Answer == "y" or Answer == "n": # 更简洁的成员判断写法 if Answer in ("y", "n"):
其他逻辑问题
你对try...finally的使用不符合当前场景:
finally块的规则是无论try块中是否抛出异常、是否执行了break/return语句,都会强制执行finally内的全部代码。你当前的代码没有需要捕获的异常场景,完全不需要使用try结构。而且你在finally里写了continue,会直接覆盖try块中break的执行效果,逻辑完全混乱。
修正后可正常运行的代码
decisão = False class Confirmation(): def menu(self, decisão): while decisão == False: Answer = input("Ready to play [y/n]?") if Answer == "y" or Answer == "n": decisão = True print(decisão) if Answer == "y": print("let's play") elif Answer == "n": print("ok, bye") exit() else: print("Write 'y' or 'n'") c = Confirmation() c.menu(decisão)
内容的提问来源于stack exchange,提问作者daniel santos
相关产品推荐
相关产品推荐

