Python异常捕获失效 输入非整数年龄仍抛出ValueError
问题根因
异常未被捕获的核心原因是触发ValueError的整数转换代码在try块覆盖范围之外。
当前代码执行到age = int(input("Please provide your age: "))时,只要用户输入非整数字符串,就会立刻抛出类型转换错误,但这行代码写在try结构前面,你定义的except ValueError分支根本无法捕获到这个位置抛出的异常,程序自然会直接报错终止。
修复方法
把年龄读取、类型转换的逻辑全部移入try块的覆盖范围内,调整后可正常捕获非法输入的异常,代码如下:
name = input("Please provide you name: ") year = 2022 try: age = int(input("Please provide your age: ")) if age == 21: print(f"Hi {name}, you are already 21.") elif age < 0: print("Age cannot be less than 0.") elif age < 21: birth_year = year - age + 21 print(f"Hi {name}, you will be 21 in {birth_year}.") elif age > 21: birth_year = year - age + 21 print(f"Hi {name}, you turned 21 in {birth_year}.") except ValueError: print("Invalid Input.")
扩展优化
如果需要实现「输错后提示用户重新输入,直到拿到合法年龄值再计算」的交互逻辑,可以在外层增加循环判断,参考代码:
name = input("Please provide you name: ") year = 2022 age = None while not age: try: input_age = int(input("Please provide your age: ")) if input_age < 0: print("Age cannot be less than 0, please re-enter.") continue age = input_age except ValueError: print("Invalid input, please enter an integer for age.") if age == 21: print(f"Hi {name}, you are already 21.") elif age < 21: birth_year = year - age + 21 print(f"Hi {name}, you will be 21 in {birth_year}.") else: birth_year = year - age + 21 print(f"Hi {name}, you turned 21 in {birth_year}.")
Python异常捕获仅对
try块包裹范围内的代码生效,所有可能抛出目标异常的逻辑,都需要放在try块内部才能被对应的except分支捕获处理。
内容的提问来源于stack exchange,提问作者Sandeep Kumar
相关产品推荐
相关产品推荐

