You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据库操作失败时应抛出何种异常?

异常层级结构

Python拥有一套完善的内置异常类层级体系,可帮助我们在不同场景下选择合适的异常类型。

如何确定数据库操作未完成时应抛出何种异常?

通用异常的做法

最直接但不够精准的方式是抛出通用的Exception,示例代码如下:

insert = collection.insert_one(foo)
if insert.acknowledged:
    logger.info(f'data saved: {foo}')
else:
    raise Exception('data not saved')

这种方式的问题在于通用异常没有明确的语义,调用方很难针对性地捕获和处理这类特定的数据库操作失败场景。

推荐的特定异常

针对数据库操作未完成的场景,有几种被广泛认可的内置异常可选:

  • OSError:Python 3中合并了原IOError,数据库写入本质属于IO操作,因连接问题、权限不足等导致的写入未完成都可以抛出该异常
  • RuntimeError:当操作在运行时无法完成,且没有更贴合的特定异常时,可使用该异常来标记运行时故障
  • 此外,多数数据库驱动(如PyMongo)会提供自身的异常体系,比如PyMongoError及其子类(WriteError、DuplicateKeyError等),这些异常专门针对数据库操作场景,语义更明确,优先推荐使用

如果内置异常和驱动提供的异常都无法满足需求,你也可以自定义异常类,继承自Exception或更具体的内置异常,让异常信息更贴合业务场景。

内容的提问来源于stack exchange,提问作者user11330490

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:20:01