知用网
第二套高阶模板 · 更大气的阅读体验

怎么处理程序中的错误 实用操作步骤与避坑指南

发布时间:2025-12-11 11:17:25 阅读:273 次

程序时,谁都会遇到错误。可能是少了个括号,也可能是用户输入了不该输的内容。关键不是不出错,而是出错后程序别直接“罢工”。学会处理错误,代码才更稳当。

错误分两种:能预判的和突然冒出来的

有些错误你能想到,比如让用户输入年龄,他偏偏填了个“abc”。这种可以用条件判断提前拦住:

age = input("请输入年龄:")
if age.isdigit():
    print(f"明年你 {int(age) + 1} 岁")
else:
    print("请输数字!")

但有些问题没法靠判断抓到,比如读一个不存在的文件,或者网络突然断了。这时候就得靠异常处理机制。

用 try-except 捕获意外

Python 里最常见的做法是 try-except。把可能出问题的代码放进 try 块,万一真出错了,就跳到 except 处理:

try:
    with open("data.txt", "r") as f:
        content = f.read()
    print(content)
except FileNotFoundError:
    print("文件没找到,检查下名字对不对")

这样程序不会因为找不到文件就崩溃,而是友好地提示用户。

别捕获所有错误,要精准一点

有人图省事,直接用 except: 捕获所有异常,看起来省心,其实隐患大。比如你本想处理除零错误,结果变量名写错了都没发现:

try:
    result = x / 0  # 这里x未定义,也会被except吃掉
except:
    print("出错了")  # 错误类型被掩盖

最好明确写出要捕获的异常类型,比如 ZeroDivisionErrorValueError,这样既安全又清晰。

finally 用来收尾

有时候不管出不出错,都得做点事,比如关闭文件、断开连接。这时 finally 就派上用场了:

file = None
try:
    file = open("log.txt", "w")
    file.write("开始运行")
    result = 10 / 0
except ZeroDivisionError:
    print("不能除以零")
finally:
    if file:
        file.close()
        print("文件已关闭")

就算中间出错,finally 里的代码也会执行,保证资源不泄露。

主动抛出错误也有用

有些情况你要主动提醒别人出错了。比如函数收到不合理参数,可以自己 raise 一个异常:

def set_age(age):
    if age < 0 or age > 150:
        raise ValueError("年龄必须在0到150之间")
    print(f"年龄设置为 {age}")

这样调用者就知道问题出在哪,而不是默默执行出错结果。

处理错误不是为了让程序“永不失败”,而是让它失败得体面一点,让人知道发生了什么,还能继续用下去。这才是好程序该有的样子。