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

python中的异常处理

异常处理

异常处理是 Python 中处理程序运行时错误的重要机制。它允许程序在遇到错误时优雅地处理,而不是直接崩溃。合理使用可以使代码更加可靠和易于维护。

使用异常处理的时候要注意的事件:

  1. 尽量捕获特定的异常,而不是通用的 Exception
  2. 在异常处理中包含尽可能多的错误信息
  3. 使用 finally 块来释放资源(如文件、网络连接等)
  4. 避免空的 except 块(这会隐藏所有错误)
  5. 合理使用自定义异常来提高代码可读性

基础写法如下:

try:# 可能引发异常的代码result = 10 / 0
except ZeroDivisionError:   # 除零异常# 处理特定异常print("不能除以零!")
except (TypeError, ValueError) as e: # 类型异常和传值异常,将这些异常统一写作别名e# 处理多种异常print(f"类型或值错误: {e}")
except Exception as e:# 处理所有除以上异常之外的其他异常print(f"发生未知错误: {e}")
else:# 如果没有异常发生,执行这部分代码print("一切正常!")
finally:# 无论是否发生异常,都会执行这部分代码print("清理工作完成")
常见异常类型
  • Exception: 所有异常的基类
  • ValueError:传值异常,即当传入无效的参数时发生的错误
  • TypeError: 类型异常,当操作或函数应用于不适当类型的对象时的异常
  • IndexError: 索引超出范围(索引不存在)的异常
  • KeyError:字典键不存在的异常
  • FileNotFoundError:当文件或目录不存在时的异常
  • ZeroDivisionError:除零异常,当除数为零时的异常
  • AttributeError: 方法不存在异常,当属性引用或赋值失败时的异常
  • IndentationError :缩进异常
  • SyntaxError :python的语法错误
  • NameError :未被声明的变量的异常
抛出异常(raise 语句)
  • raise 关键字用于主动抛出异常(也称为抛出异常),可以使用它来触发内置的异常,或者自定义的异常。
  • 直接使用 raise 抛出新异常,Python 会自动设置异常发生的上下文。(隐式链式异常)
  • 使用raise … from … 用于显式地关联两个异常,形成一个异常链(可在调试的时候使用),使用 from 显式指定异常的原因。
  • raise from None (禁止异常链):如果想隐藏原始异常,可以使用 raise … from None
# 隐式链式异常
try:1 / 0
except ZeroDivisionError:raise ValueError("除数不能为零")
# 显式链式异常
try:1 / 0
except ZeroDivisionError as e:raise ValueError("除数不能为零") from e
# 禁止显示异常链,但现实自己写的异常信息
try:1 / 0
except ZeroDivisionError:raise ValueError("除数不能为零") from None
自定义异常(继承 Exception 类来创建自定义异常)
class MyCustomError(Exception):#自定义异常类def __init__(self, message, code):super().__init__(message)self.code = code
try:raise MyCustomError("发生了自定义错误", 500)
except MyCustomError as e:print(f"错误消息: {e}, 错误代码: {e.code}")
http://www.xdnf.cn/news/3833.html

相关文章:

  • 【CF】Day50——Codeforces Round 960 (Div. 2) BCD
  • 数学实验Matlab
  • 多把锁以及线程死锁问题
  • Linux-GRUB全面指南
  • CUDA输出“hello world”
  • 多数据源动态切换
  • 算法每日一题 | 入门-顺序结构-数字反转
  • (38)VTK C++开发示例 ---纹理裁剪
  • C++负载均衡远程调用学习之异步消息任务功能与连接属性
  • CVPR2021 | 重新思考视觉Transformer中的自注意力机制
  • Java学习手册:Spring 生态其他组件介绍
  • 单细胞测序试验设计赏析(一)
  • AWS在跨境电商中的全场景实践与未来生态构建
  • D. 例题3.2.2 整数划分问题
  • 二种MVCC对比分析
  • 学习黑客风险Risk
  • iOS启动优化:从原理到实践
  • 2025年渗透测试面试题总结-拷打题库35(题目+回答)
  • 【C++】:C++17新特性
  • Vivado FPGA 开发 | 创建工程 / 仿真 / 烧录
  • 2845. 统计趣味子数组的数目
  • 【LLaMA-Factory实战】Web UI快速上手:可视化大模型微调全流程
  • The Sims 4 模拟人生 4 [DLC 解锁] [Steam Epic EA] [Windows SteamOS]
  • 《操作系统真象还原》第十二章(2)——进一步完善内核
  • 影刀RPA中新增自己的自定义指令
  • UDP网络编程
  • Xilinx FPGA | 管脚约束 / 时序约束 / 问题解析
  • 安卓基础(悬浮窗)
  • Java中深拷贝与浅拷贝的深入探讨
  • C++类_虚基类