Python Book类非编辑状态下抛出不可编辑异常的实现问询
解决方案:自定义专属异常更合适
没错,这种场景下自定义异常是最佳选择!Python标准库确实没有专门对应「对象不可编辑」这个业务场景的内置异常——虽然像PermissionError这类异常能勉强凑合用,但自定义异常的语义更清晰,能让你的代码可读性和可维护性大大提升。
具体实现步骤
首先,我们先定义一个继承自Exception的专属异常类,给它起个见名知意的名字,比如BookNotEditableError:
class BookNotEditableError(Exception): """当尝试修改或删除不可编辑的Book对象时抛出的异常""" pass
接下来,修改你的Book类,在set_details()和delete()方法里添加判断逻辑,当editable为False时抛出这个异常:
class Book(): def __init__(self, name, editable=True): self.name = name # 其他属性初始化... self.editable = editable def get_details(self): # 原有的获取详情逻辑 return f"书名: {self.name}" def set_details(self, new_name): if not self.editable: raise BookNotEditableError("Book不可编辑") # 原有的修改详情逻辑 self.name = new_name def delete(self): if not self.editable: raise BookNotEditableError("Book不可编辑") # 原有的删除逻辑 print(f"已删除书籍: {self.name}")
为什么推荐自定义异常?
- 语义明确:别人看代码或者调试时,一看到
BookNotEditableError就知道是「不可编辑的书籍被修改/删除」的问题,不用再去猜是权限问题还是其他错误。 - 便于针对性处理:后续捕获异常时,可以专门针对这个异常做处理,不会和其他类似异常(比如系统权限的
PermissionError)混淆:try: book.set_details("新书名") except BookNotEditableError as e: print(f"操作失败: {e}") # 这里可以添加专属的处理逻辑,比如提示用户联系管理员
如果实在不想自定义异常,用PermissionError也能实现功能,但就失去了自定义异常带来的语义清晰性,所以还是更推荐前者。
内容的提问来源于stack exchange,提问作者codeandfire
相关产品推荐
相关产品推荐

