当前位置: 首页 > news >正文

Python捕获异常

Python捕获异常主要通过try-except语句实现,以下是核心语法和使用场景:

一、基础捕获结构

try:  # 可能引发异常的代码  result = 10 / 0  
except ZeroDivisionError:  # 处理特定异常  print("除数不能为零")  

二、捕获多种异常

try:  # 可能引发多种异常的代码  value = int("abc")  
except (ValueError, TypeError) as e:  # 处理多个异常类型  print(f"输入错误:{e}")  

三、捕获所有异常

Exception捕获所有非系统退出的异常(不推荐滥用,优先用具体异常类型):

try:  risky_operation()  
except Exception as e:  print(f"发生未知错误:{e}")  

四、elsefinally子句

  • else:无异常时执行,位于except之后。

    try:  x = 10 / 2  
    except ZeroDivisionError:  print("除零错误")  
    else:  print("计算结果:", x)  # 输出:计算结果:5.0  
    
  • finally:无论是否异常都会执行,常用于释放资源(如关闭文件)。

    try:  file = open("data.txt", "r")  data = file.read()  
    except FileNotFoundError:  print("文件不存在")  
    finally:  file.close()  # 确保文件被关闭  print("资源已释放")  
    

五、异常传递与自定义异常

  • 异常传递:异常会从引发处向上传递,可在调用栈中逐层捕获。

    def func1():  raise ValueError("参数错误")  def func2():  func1()  try:  func2()  
    except ValueError as e:  print(f"捕获到异常:{e}")  # 输出:捕获到异常:参数错误  
    
  • 自定义异常:继承Exception类创建业务专用异常。

    class InsufficientBalanceError(Exception):  def __init__(self, balance, amount):  super().__init__(f"余额不足:当前{balance}元,需{amount}元")  try:  if balance < amount:  raise InsufficientBalanceError(balance, amount)  
    except InsufficientBalanceError as e:  print(e)  # 输出:余额不足:当前100元,需150元  
    

六、最佳实践

  1. 精准捕获:优先用具体异常类型(如ZeroDivisionError),避免用裸except:

  2. 资源管理:用try/finally或上下文管理器(with)确保资源释放。

  3. 日志记录:在except中记录异常信息(如logging.error),便于调试。

 

http://www.dtcms.com/a/297289.html

相关文章:

  • Yolov8/Yolov11实例分割训练自有数据集
  • Springboot项目实现将文件上传到阿里云
  • Python实战:数据处理与可视化的奇妙之旅
  • 双指针算法介绍及使用(下)
  • JavaScript 中 let 在循环中的作用域机制解析
  • 没有 Mac,如何上架 iOS App?多项目复用与流程标准化实战分享
  • uniapp使用css实现进度条带动画过渡效果
  • uniapp之微信小程序标题对其右上角按钮胶囊
  • golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解
  • 海康SDK球机精确控制[球机预置点配置]
  • 未来之路 - eBPF 与 Cilium 如何重塑网络
  • 在kdb+x中使用SQL
  • 理解Spring中的IoC
  • 基于新型群智能优化算法的BP神经网络初始权值与偏置优化
  • WPF MVVM进阶系列教程(二、数据验证)
  • Elasticsearch-9.0.4安装教程
  • 【SpringAI实战】实现仿DeepSeek页面对话机器人(支持多模态上传)
  • MySQL-Every derived table must have its own alias
  • OpenRLHF:面向超大语言模型的高性能RLHF训练框架
  • 基于 Nginx 与未来之窗防火墙构建下一代自建动态网络防护体系​—仙盟创梦IDE
  • Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
  • 秋招Day19 - 分布式 - 分布式锁
  • 静默的环保革命:Deepoc具身智能如何让垃圾桶读懂垃圾的语言
  • 一道检验编码能力的字符串的题目
  • 进程控制->进程替换(Linux)
  • LLM:Day3
  • 学习嵌入式的第二十九天-数据结构-(2025.7.16)线程控制:互斥与同步
  • 【运维】ubuntu 安装图形化界面
  • 顺应AI浪潮,电科金仓数据库再创辉煌
  • 继承接口实现websocke,实现任意路径链接