捕获异常后直接抛出是否正确?SonarScan代码异味疑问
解决SonarScan代码异味:多余的Except子句处理
你的代码中except FileNotFoundError as e: raise e属于冗余逻辑——Python在异常发生时,若没有捕获处理,会自动将异常向上层抛出,这个子句没有执行任何额外操作,因此SonarScan会提示代码异味。
优化方案1:移除冗余except块
如果不需要在捕获异常时做额外处理,直接删除整个except块即可,代码行为和原代码完全一致,同时更简洁:
import json def read_file(): try: with open("/test/test.txt", 'r') as f: json_obj = json.load(f) return json_obj # 建议补充返回值,避免函数无返回内容 # 移除多余的except块,异常会自动向上抛出
优化方案2:添加实际处理逻辑(若需要)
如果需要在捕获异常时执行额外操作(比如记录错误日志),则保留except块并补充处理代码,同时用raise(不带异常对象)重新抛出,这样能保留完整的异常追踪栈:
import json import logging def read_file(): try: with open("/test/test.txt", 'r') as f: json_obj = json.load(f) return json_obj except FileNotFoundError as e: logging.error(f"读取文件失败:{str(e)}") # 添加实际处理逻辑,如日志记录 raise # 重新抛出异常,保留原始异常栈信息
内容的提问来源于stack exchange,提问作者Farid Arshad
相关产品推荐
相关产品推荐

