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

Python交互式计算器自定义异常处理问题:修复ValueError报错

修复后的Python交互式计算器代码
# 自定义异常类
class FormulaError(Exception):
    """提示非法运算符"""
    pass

class MissingElement(Exception):
    """提示输入元素数量错误"""
    pass

class InvalidValueError(Exception):
    """提示非数值输入"""
    pass

def calculate():
    user_input = input("请输入计算式(如 3 + 5):").strip()
    elements = user_input.split()
    
    # 检查元素数量是否符合要求
    if len(elements) != 3:
        raise MissingElement("输入格式错误!请按照「数值 运算符 数值」的格式输入")
    
    num1_str, op, num2_str = elements
    
    # 转换数值时捕获系统异常,抛出自定义异常
    try:
        num1 = float(num1_str)
        num2 = float(num2_str)
    except ValueError:
        raise InvalidValueError("输入包含非数值内容!请输入有效的数字")
    
    # 校验运算符合法性
    valid_ops = {"+", "-", "*", "/"}
    if op not in valid_ops:
        raise FormulaError(f"非法运算符「{op}」!仅支持 +、-、*、/")
    
    # 执行计算逻辑
    if op == "+":
        result = num1 + num2
    elif op == "-":
        result = num1 - num2
    elif op == "*":
        result = num1 * num2
    elif op == "/":
        if num2 == 0:
            print("错误:除数不能为0")
            return
        result = num1 / num2
    
    print(f"计算结果:{result}")

# 主交互循环,处理异常并允许重新输入
while True:
    try:
        calculate()
        again = input("是否继续计算?(y/n):").strip().lower()
        if again != "y":
            break
    except (FormulaError, MissingElement, InvalidValueError) as e:
        print(f"错误:{e}")
        print("请重新输入。")
关键修复说明
  • 解决命名冲突:将自定义的「非数值输入」异常从ValueError改名为InvalidValueError,避免和Python内置ValueError混淆,这是原代码中自定义异常不生效的核心原因。
  • 主动捕获数值转换异常:在尝试将输入字符串转为数值时,捕获系统原生ValueError,随即抛出自定义的InvalidValueError,确保用户看到自定义提示。
  • 前置元素数量检查:拆分输入后立刻校验元素数量是否为3,不符合则抛出MissingElement异常,保证该异常逻辑正常触发。
  • 统一异常处理流程:在主循环中集中捕获所有自定义异常,提示错误后允许用户重新输入,维持交互的连贯性。
验证场景
  • 输入2 + a:触发InvalidValueError,提示「错误:输入包含非数值内容!请输入有效的数字」
  • 输入2 +:触发MissingElement,提示「错误:输入格式错误!请按照「数值 运算符 数值」的格式输入」
  • 输入2 $ 5:触发FormulaError,提示「错误:非法运算符「$」!仅支持 +、-、*、/」

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:30:58