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

如何基于ErrorTexto基类与ErrorLetra子类实现输入验证异常处理?

问题分析与修正方案

原代码存在的核心问题

  • choices列表定义错误:原代码将所有名字放在单个字符串里,变成["Pedro, Joaquin, Celeste, Karen"],导致无法正确判断输入是否属于可选范围。
  • 缺少异常抛出逻辑:try块仅获取输入,没有检查输入的违规条件(含字母P、不在可选列表),不会触发自定义异常。
  • except分支判断无效:elif ErrorTexto的写法不符合语法,无法正确匹配基类异常。
  • 输入提示格式混乱:换行和转义字符导致提示显示异常,影响用户体验。

修正后的完整代码

# 定义基类异常
class ErrorTexto(Exception):
    pass

# 定义子类异常,继承自ErrorTexto
class ErrorLetra(ErrorTexto):
    pass

try:
    # 正确定义可选列表,每个名字为独立元素
    choices = ["Pedro", "Joaquin", "Celeste", "Karen"]
    # 生成友好的提示文本
    choices_str = ", ".join(choices)
    # 调整输入提示格式,清晰展示要求
    some_text = input(f"Escribe un texto, que no lleve la letra P y que este dentro de [{choices_str}]\n>_ ")
    
    # 检查输入是否含字母P(大小写都判断),触发子类异常
    if "P" in some_text or "p" in some_text:
        raise ErrorLetra()
    # 检查输入是否不在可选列表,触发基类异常
    if some_text not in choices:
        raise ErrorTexto()

except ErrorLetra:
    print("No puede llevar la letra P")
except ErrorTexto:
    print(f"Tiene que estar dentro de {choices}")
else:
    print("Todo bien")

关键改动说明

  1. 修正choices列表结构,确保每个可选值是独立元素,让some_text in choices的判断生效。
  2. 在try块内添加条件检查:
    • 检测输入包含大小写P时,抛出ErrorLetra异常;
    • 检测输入不在可选列表时,抛出ErrorTexto异常。
  3. 拆分except分支:先捕获子类异常,再捕获基类异常,逻辑更清晰,无需额外类型判断。
  4. 优化输入提示格式,让用户明确知道输入要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:21:04