如何断言异常类的属性值?是否需为每种异常单独建类?
异常验证与设计方案建议
用assertRaises上下文管理器捕获异常验证属性
Python的unittest里的assertRaises支持作为上下文管理器使用,能直接获取抛出的异常实例,完美解决你要验证type属性的需求,比手动try-catch更规范简洁。
示例代码:
def test_missing_name_field(): with self.assertRaises(ContentNotFoundException) as context_manager: # 执行会触发缺失name的业务逻辑 process_user_data({"age": 30, "sex": "male"}) raised_exception = context_manager.exception self.assertEqual(raised_exception.type, "name")
这种写法既符合单元测试的标准范式,又能精准验证异常的属性值,完全替代怪异的try-catch写法。
是否要拆分细分异常类?
要不要拆成NameNotFoundException、AgeNotFoundException这类专属异常,看业务场景:
- 如果不同内容缺失对应的处理逻辑差异很大(比如不同的错误码、不同的前端提示、不同的补偿流程),那拆分是合理的,能让代码语义更清晰,后续维护扩展更方便。
- 如果所有内容缺失的处理逻辑完全一致,只是需要标记缺失类型,那单异常类加
type属性就足够,没必要过度拆分导致类数量冗余。
内容的提问来源于stack exchange,提问作者Sunshine Vasan
相关产品推荐
相关产品推荐

