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

Python复合Try/Except块:命令行单词添加校验问题

命令行单词选择器:单词校验与异常处理实现方案

一、自定义异常类

先针对三种非法情况定义专属异常,方便精准捕获并给出对应提示:

class SpaceInWordError(Exception):
    """输入含空格时触发的异常"""
    pass

class NumberInWordError(Exception):
    """输入含数字时触发的异常"""
    pass

class UppercaseInWordError(Exception):
    """输入含大写字母时触发的异常"""
    pass

二、校验逻辑实现

写一个校验函数,按顺序检查输入,不符合规则就抛出对应异常:

def validate_word(word):
    if ' ' in word:
        raise SpaceInWordError("单词不能包含空格")
    if any(char.isdigit() for char in word):
        raise NumberInWordError("单词不能包含数字")
    if any(char.isupper() for char in word):
        raise UppercaseInWordError("单词不能包含大写字母")
    return True

三、复合Try/Except块实现(更高效)

用一个复合的try-except块即可,不需要多个独立块——校验是顺序执行的,触发异常后直接进入对应分支,不会执行后续校验,效率更高,代码结构也更集中:

def add_word_to_file(word, file_path):
    try:
        validate_word(word)
        # 校验通过,追加到文件(避免开头多余空格)
        with open(file_path, 'a', encoding='utf-8') as f:
            if _has_content(file_path):
                f.write(f" {word}")
            else:
                f.write(word)
        print(f"单词「{word}」已成功添加")
    except SpaceInWordError as e:
        print(f"添加失败:{e}")
    except NumberInWordError as e:
        print(f"添加失败:{e}")
    except UppercaseInWordError as e:
        print(f"添加失败:{e}")

def _has_content(file_path):
    # 辅助函数:判断文件是否已有内容
    try:
        return len(open(file_path, 'r', encoding='utf-8').read().strip()) > 0
    except FileNotFoundError:
        return False

四、为什么复合Try/Except更高效?

  • 多个独立try块会重复执行校验逻辑(比如第一个块检查空格,第二个块还要再扫一遍空格),存在冗余。
  • 复合块中校验是一次性顺序执行的,触发异常后直接跳出,无多余执行步骤,性能更优。
  • 所有异常处理集中在一起,便于后续维护和修改。

五、替代方案:优化原if逻辑

如果不想用异常,也可以直接优化原if判断,只要确保只有校验通过时才执行添加操作,就能解决之前的误添加问题:

def validate_word_with_if(word):
    if ' ' in word:
        print("单词不能包含空格")
        return False
    if any(char.isdigit() for char in word):
        print("单词不能包含数字")
        return False
    if any(char.isupper() for char in word):
        print("单词不能包含大写字母")
        return False
    return True

def add_word_with_if(word, file_path):
    if validate_word_with_if(word):
        with open(file_path, 'a', encoding='utf-8') as f:
            if _has_content(file_path):
                f.write(f" {word}")
            else:
                f.write(word)
        print(f"单词「{word}」已成功添加")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:50:27