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

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}")

相关文章:

  • 【关于LM311实现过零比较器输出波形】2022-9-27
  • C++【内存管理】
  • 二、机器学习中Python变量基础
  • OpenharmonyOS+RK3568,【编译烧录】
  • 动态规划-1137.第N个泰波那契数-力扣(LeetCode)
  • 启发式算法-蚁群算法
  • <property name=“userDao“ ref=“userDaoBean“/> 这两个的作用和语法
  • 第15章 对API的身份验证和授权
  • MySQL 空值处理函数对比:IFNULL、COALESCE 和 NULLIF
  • 基于Vue2 + Element 实现任务列表管理功能的详细教程
  • 用Maven定位和解决依赖冲突
  • Dart和Go语言特征对比
  • KeyPresser 一款自动化按键工具
  • 用Suno V4.5试了一下1850字的歌词进行创作出来了6分钟的歌曲
  • 计算机视觉与深度学习 | 视觉里程计算法综述(传统+深度)
  • 计算机视觉与深度学习 | 什么是图像金字塔?
  • 聊一聊自然语言处理在人工智能领域中的应用
  • MCP 协议知识分享指南
  • Swift:重构开发范式的现代编程语言
  • 【原创】风云扫描王[特殊字符]OCR识别翻译!证件照
  • 马斯克的“星舰基地”成为新城镇,首任市长为SpaceX员工
  • 陈颖已任上海黄浦区委常委、统战部部长
  • 对谈|《对工作说不》,究竟是要对什么说不?
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 荣盛发展股东所持1.17亿股将被司法拍卖,起拍价约1.788亿元
  • 经营业绩持续稳中向好,国铁集团2024年度和2025年一季度财务决算公布