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}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值