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

Python:如何在条件不满足时让函数彻底终止并报错?

修改后的Python函数实现

1. get_source_path 函数(确保文件存在)

负责校验输入路径的有效性,确保对应文件存在且是合法文件。

import os
import tomllib  # Python 3.11+ 内置,低版本可使用第三方库 tomli

def get_source_path(file_path: str) -> str:
    """获取文件路径并确保文件存在且为合法文件"""
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"指定文件不存在: {file_path}")
    if not os.path.isfile(file_path):
        raise IsADirectoryError(f"指定路径不是有效文件: {file_path}")
    return file_path

2. check_toml 函数(校验并抛出明确错误)

替换原打印错误的逻辑,在校验失败时直接抛出针对性异常,校验通过则返回解析后的TOML字典。

def check_toml(file_path: str) -> dict:
    """校验TOML文件的default表及必填字段,失败抛出错误,成功返回解析结果"""
    # 先通过get_source_path确保文件合法
    valid_path = get_source_path(file_path)
    
    # 读取并解析TOML文件
    with open(valid_path, "rb") as f:
        toml_dict = tomllib.load(f)
    
    # 检查default表是否存在
    if "default" not in toml_dict:
        raise ValueError("TOML文件中缺失必填的'default'配置表")
    
    default_table = toml_dict["default"]
    
    # 校验三个必填字段的有效性
    required_fields = ["conf_path", "prefix", "suffix"]
    for field in required_fields:
        if field not in default_table:
            raise ValueError(f"'default'表中缺失必填字段: {field}")
        field_value = default_table[field]
        if field_value is None or (isinstance(field_value, str) and field_value.strip() == ""):
            raise ValueError(f"'default'表中字段'{field}'的值不能为空或None")
    
    # 所有校验通过,返回解析后的配置字典
    return toml_dict

关键修改说明

  • 用明确的异常抛出替代原打印逻辑,异常类型(FileNotFoundError/ValueError)和错误信息清晰,调用方可以选择捕获处理或直接让程序终止。
  • 覆盖所有校验场景:文件合法性、default表存在性、字段存在性、字段值非空性,每个校验点都有针对性的错误提示。
  • 正常流程下返回解析完成的TOML字典,满足业务后续使用需求。

使用示例

try:
    config = check_toml("your_config.toml")
    print("配置校验通过,开始执行业务逻辑...")
    # 这里写后续业务代码
except (FileNotFoundError, ValueError, IsADirectoryError) as e:
    print(f"配置校验失败: {e}")
    exit(1)  # 直接终止程序

内容的提问来源于stack exchange,提问作者uncrayon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:25:31