Administrator
发布于 2026-06-21 / 2 阅读
0
0

Python 异常捕获 try-except,处理程序报错,让代码稳定不崩溃

一、前言

之前写的代码一旦遇到错误(比如文件不存在、输入文字转数字、下标越界),程序会直接终止运行。

本篇学习try-except异常捕获机制,主动拦截、处理运行时错误,保证程序不会直接崩溃,同时精准定位报错信息。

二、什么是异常

程序运行过程中出现的错误统称为异常,常见场景:

  1. 用户输入文字,强制转整数:int("abc")ValueError

  2. 读取不存在的文件 → FileNotFoundError

  3. 列表访问不存在的下标 → IndexError

  4. 字典读取不存在的键 → KeyError

  5. 数字除以 0 → ZeroDivisionError

三、基础 try-except 语法

python

运行

try:
    # 可能出错的代码放这里
    风险代码
except 异常类型:
    # 出错后执行的补救代码
    错误处理逻辑

基础示例:处理输入转数字报错

python

运行

try:
    num = int(input("请输入数字:"))
    print(f"你输入的数字是:{num}")
except ValueError:
    print("输入错误!你输入的不是合法数字。")

运行测试:

  • 输入66 → 正常执行打印

  • 输入abc → 触发 ValueError,执行 except 内提示,程序不会闪退

四、捕获多种不同异常

一段代码可能触发多种错误,可写多个 except 分别处理:

python

运行

try:
    arr = [10, 20, 30]
    idx = int(input("输入下标取值:"))
    print(arr[idx])
    res = 10 / idx
    print(res)
except ValueError:
    print("错误:必须输入数字下标")
except IndexError:
    print("错误:下标超出列表范围,列表只有0、1、2")
except ZeroDivisionError:
    print("错误:不能除以0")

五、万能捕获:捕获所有异常(Exception)

不确定会出现什么错误时,使用通用异常捕获,可拿到错误详情:

python

运行

try:
    f = open("测试文件.txt", "r", encoding="utf-8")
except Exception as err:
    print("程序出现异常,错误详情:", err)

开发建议:优先精准捕获指定异常,调试时可用万能捕获查看完整错误信息。

六、else:无异常才执行的代码块

try中代码全部正常、没有报错时,才会进入else分支:

python

运行

try:
    age = int(input("输入年龄:"))
except ValueError:
    print("输入不是数字")
else:
    # 只有转换成功才执行
    if age >= 18:
        print("成年")
    else:
        print("未成年")

七、finally:无论是否报错,必定执行

不管代码是否异常,finally里的代码一定会运行,常用于关闭文件、释放资源:

python

运行

f = None
try:
    f = open("笔记.txt", "r", encoding="utf-8")
    print(f.read())
except Exception as e:
    print("读取失败:", e)
finally:
    # 文件无论读取成功/失败,最后都关闭
    if f is not None:
        f.close()
        print("文件已关闭")

补充:with open()语法自带自动关闭,日常文件读写优先用 with。

八、主动抛出异常 raise

程序逻辑不满足需求时,可以手动抛出错误,主动终止流程并提示:

python

运行

def check_age(age):
    if age < 0:
        # 主动抛出数值错误
        raise ValueError("年龄不能是负数!")
    return age

try:
    check_age(-5)
except ValueError as err:
    print("校验失败:", err)

九、综合实战:带异常处理的计算器

整合输入、类型转换、除零、异常捕获全套知识点

python

运行

def calc():
    try:
        n1 = float(input("输入第一个数字:"))
        op = input("输入运算符(+ - * /):")
        n2 = float(input("输入第二个数字:"))
        if op == "+":
            print(f"结果:{n1 + n2}")
        elif op == "-":
            print(f"结果:{n1 - n2}")
        elif op == "*":
            print(f"结果:{n1 * n2}")
        elif op == "/":
            print(f"结果:{n1 / n2}")
        else:
            print("不支持该运算符")
    except ValueError:
        print("错误:请输入合法数字!")
    except ZeroDivisionError:
        print("错误:除数不能为0!")
    except Exception as e:
        print("未知错误:", e)

calc()

十、新手常见问题

  1. 捕获异常类型写错,错误无法拦截:核对报错提示的异常名

  2. 万能捕获滥用:不推荐直接写 except:,尽量带上 Exception 查看错误信息

  3. finally 逻辑冗余:文件读写优先用 with 自动释放资源

  4. 忘记缩进 try/except 内代码,触发语法错误

十一、下期预告

下一篇:Python 模块与库导入:pip 安装第三方包教程,学会使用现成工具库快速开发。


评论