You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用更优雅的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:29:10