Python中如何实现特定异常与无异常else分支复用相同代码?
Python 原生没有 except NotFound or else 这类语法,你可以通过以下几种方案消除重复代码:
方案1:封装公共逻辑为函数
这是最通用、可读性最高的方案,把重复执行的代码抽成独立函数,两个分支统一调用即可:
value = None class NegativeNumber(Exception): pass class NotFound(Exception): pass def process_valid_case(): print(1) return 1 try: if value is None: raise NotFound elif value < 0: raise NegativeNumber except NegativeNumber: print("Error: negative number") except NotFound: value = process_valid_case() else: value = process_valid_case()
方案2:用状态标记合并分支
新增标记位判断是否触发了需要单独处理的负数异常,其余场景统一走公共逻辑:
value = None class NegativeNumber(Exception): pass class NotFound(Exception): pass is_negative_error = False try: if value is None: raise NotFound elif value < 0: raise NegativeNumber except NegativeNumber: is_negative_error = True print("Error: negative number") except NotFound: pass # 只要不是负数异常,统一走该逻辑 if not is_negative_error: value = 1 print(value)
方案3:优化异常设计(最适配当前场景)
你的业务中只有负数是需要单独报错的场景,值为None和合法非负数的处理逻辑完全一致,完全可以去掉不必要的NotFound异常,直接简化代码:
value = None class NegativeNumber(Exception): pass try: # 仅在值为负数时抛出异常 if value is not None and value < 0: raise NegativeNumber except NegativeNumber: print("Error: negative number") else: value = 1 print(value)
内容的提问来源于stack exchange,提问作者Galuoises
相关产品推荐
相关产品推荐

