Python中try-except用法详解

Python 的 try-except 块的用法详解


1. 抛出异常(raise)

except 块中,你可以:

  • 重新抛出当前异常(继续向上层传递)
  • 抛出新的异常(自定义错误信息或类型)

(1) 重新抛出当前异常(不加修改)

try:
    result = 10 / 0
except ZeroDivisionError:
    print("捕获到除以零错误,但继续抛出")
    raise  # 重新抛出相同的异常

效果

  • 程序会打印消息,但仍然会因 ZeroDivisionError 终止。

(2) 抛出新的异常(自定义错误)

try:
    age = int(input("请输入年龄: "))
    if age < 0:
        raise ValueError("年龄不能为负数")  # 主动抛出异常
except ValueError as e:
    print(f"输入错误: {e}")
    raise  # 可以选择继续抛出,或者用 raise ValueError("新的错误信息") 自定义

效果

  • 如果输入负数,会抛出 ValueError 并打印错误信息。

2. 跳过异常(继续执行)

如果不想让异常终止程序,可以在 except 块中处理错误后继续执行。

(1) 静默跳过(不显示错误)

try:
    result = 10 / 0
except ZeroDivisionError:
    pass  # 直接跳过,不做任何处理

效果

  • 程序不会崩溃,但也不会提示错误(可能隐藏潜在问题,慎用!)。

(2) 记录错误后继续

try:
    file = open("data.txt", "r")
except FileNotFoundError:
    print("文件不存在,但程序继续运行")  # 记录错误,但不终止
    # 可以设置默认值
    content = "默认内容"
else:
    content = file.read()
    file.close()

print(content)  # 无论是否出错,都会执行

效果

  • 即使文件不存在,程序也不会崩溃,而是使用默认值继续运行。

3. 结合 elsefinally

  • else:仅当 try 块无异常时执行
  • finally:无论是否异常都会执行(适合资源清理)
try:
    data = {"key": "value"}
    print(data["nonexistent_key"])  # KeyError
except KeyError:
    print("键不存在,跳过错误")
else:
    print("这行只会在无异常时执行")
finally:
    print("这行无论如何都会执行")

输出

键不存在,跳过错误
这行无论如何都会执行

总结

操作代码示例用途
抛出异常raiseraise ValueError("msg")终止当前流程,向上层传递错误
跳过异常except: pass忽略错误,继续执行(慎用!)
记录后继续except: print(...)提示错误但程序不终止
elseelse: ...仅当无异常时执行
finallyfinally: ...无论是否异常都执行(如关闭文件)

最佳实践

推荐

  • except 中明确处理错误(如提供默认值或记录日志)。
  • 使用 finally 确保资源释放(如关闭文件、数据库连接)。

不推荐

  • 使用 except: pass 完全忽略错误(可能隐藏严重问题)。
  • 过度捕获异常(应只捕获你能处理的错误)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值