python自定义异常需继承exception或其子类,建议重写__init__和__str__;应命名规范(以error结尾)、集中定义在exceptions.py等模块中。

Python中自定义异常,本质是定义一个继承自 Exception(或其子类)的类,不需要额外实现方法,但建议重写 __init__ 和 __str__ 以提升可读性和调试体验。
继承合适的异常基类
大多数情况下,直接继承 Exception 即可;若想语义更明确,可选择更具体的内置异常作为父类,例如:
-
ValueError:用于参数值不合法(如传入负数给只接受正数的函数) -
RuntimeError:表示运行时出现的、未归类的错误 -
ConnectionError:网络连接类问题
不推荐直接继承 BaseException(它是所有异常的根,包括 SystemExit、KeyboardInterrupt 等,不应被普通业务异常继承)。
添加有意义的初始化与提示信息
在 __init__ 中接收必要参数,并调用父类初始化;可选地重写 __str__ 或利用父类默认行为。例如:
本文档主要讲述的是eclipse maven工程配置说明;编写本文的目的解决因环境问题带来的一系别问题,比如类没找到异常,JAR新旧并成,导致有些方法不可用,支持热拔插式的修改,当调试程序时,修改后不用重启tomcat等问题;感兴趣的朋友可以过来看看
立即学习“Python免费学习笔记(深入)”;
class InsufficientBalanceError(Exception):def __init__(self, balance, amount):
self.balance = balance
self.amount = amount
super().__init__(f"余额不足:当前{balance},需{amount}")
在代码中主动抛出并捕获
使用 raise 抛出自定义异常;用 try...except 捕获时,类型匹配优先于消息内容:
raise InsufficientBalanceError(50, 100)-
except InsufficientBalanceError as e:—— 可精确捕获该类异常 - 也可同时捕获多个自定义异常:
except (InsufficientBalanceError, InvalidAccountError):
捕获后可通过 e.balance、e.amount 访问附加属性,便于日志记录或差异化处理。
命名规范与模块组织建议
异常类名应以 Error 结尾(如 ConfigParseError),符合 Python 社区惯例;所有自定义异常建议集中定义在单独模块(如 exceptions.py)中,方便复用和维护。大型项目还可按功能分组,例如 auth_errors.py、db_errors.py。









