9.2 自定义异常
Python 内置异常可以处理很多通用错误,但真实项目经常会遇到业务规则错误。例如“库存不足”不是 Python 语法错误,也不是类型错误,而是业务规则被违反。
定义异常类
自定义异常(custom exception)通常继承 Exception。
python
class OutOfStockError(Exception):
pass很多时候,自定义异常类里可以先只写 pass。异常信息可以在 raise 时传入:
python
raise OutOfStockError("笔记本库存不足。")自定义异常的名字应该清楚表达错误含义。OutOfStockError 比普通的 Exception 更具体,也更容易被调用者识别。
正在加载概念检查...
库存案例
正在加载交互实验...
python
class OutOfStockError(Exception):
pass
class Product:
def __init__(self, name, stock):
self.name = name
self.stock = stock
def purchase(self, quantity):
if quantity <= 0:
raise ValueError("购买数量必须大于 0。")
if quantity > self.stock:
raise OutOfStockError("%s 库存不足。" % self.name)
self.stock -= quantity
product = Product("笔记本", 5)
try:
product.purchase(3)
print("购买成功,剩余库存:%d" % product.stock)
product.purchase(4)
except OutOfStockError as error:
print("购买失败:%s" % error)运行结果:
text
购买成功,剩余库存:2
购买失败:笔记本库存不足。这个例子里,ValueError 表示参数本身不合理,OutOfStockError 表示业务规则不允许继续购买。不同异常表达不同问题,调用者才能做出更准确的处理。
正在加载概念检查...
为什么要自定义异常
自定义异常的价值不只是“能抛出错误”,而是让错误更有语义(semantics)。
当调用者捕获 OutOfStockError 时,它很清楚这是库存问题,可以显示“补货”或“换商品”等业务操作;而捕获 ValueError 时,它更可能提示用户修改输入数量。
正在加载概念检查...
正在加载本节练习...