如何用更优雅的Pythonic方式实现按优先级读取文件(替代嵌套try-except)
更优雅的Pythonic写法优化嵌套try-except
可以通过提取重复参数+循环遍历候选序列的方式替代嵌套try-except,让代码更简洁、易维护,同时保留原有的优先级逻辑:
import pandas as pd # 提取通用的读取参数,减少重复代码 read_table_params = { "nrows": 73, "infer_datetime_format": True, "parse_dates": ["DATE"], "sep": "\s+", "engine": "python" } # 按优先级顺序,整理文件路径与对应的切片范围 priority_candidates = [ (model_data_path_1, slice(0, 23)), (model_data_path_2, slice(0, 12)), (model_data_path_3, slice(12, 36)), (model_data_path_4, slice(23, 47)) ] Tmax_bachir = None for data_path, t_slice in priority_candidates: try: data_bachir = pd.read_table(data_path, **read_table_params) Tmax_bachir = str(max(data_bachir.T2M.loc[t_slice])) break # 读取成功,终止循环,不再尝试后续低优先级文件 except FileNotFoundError: # 建议捕获具体异常,避免吞掉其他逻辑错误 continue # 可选:添加其他可能的异常,比如pd.errors.EmptyDataError等 except pd.errors.EmptyDataError: continue # 处理所有文件都无法读取的边界情况 if Tmax_bachir is None: raise RuntimeError("所有候选数据文件均无法正常读取")
优化点说明:
- 消除冗余:把重复的
pd.read_table参数提取为字典,通过**解包传递,避免重复写相同参数 - 逻辑清晰:用列表按优先级存储(路径,切片)元组,循环逐个尝试,符合Python的"扁平优于嵌套"原则
- 异常可控:替换裸
except为具体异常类型(比如文件不存在、空文件等),避免意外捕获代码逻辑错误 - 扩展性强:后续新增优先级文件时,只需在
priority_candidates列表中添加新的元组即可,无需修改循环逻辑
内容的提问来源于stack exchange,提问作者Mohamed Ait Ahmed
相关产品推荐
相关产品推荐

