You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:57:23