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

Python Codio练习题:SyntaxError未按预期抛出问题排查

存在的问题
  • 异常处理逻辑错误:捕获AssertionError后仅打印提示文本,没有按要求抛出SyntaxError或ValueError类型的异常,导致测试无法检测到预期异常。
  • 格式校验逻辑不合理:用去空格后全为数字的规则校验整个输入,若学号允许包含非数字字符会产生误判;同时没有校验输入拆分后的字段数量是否符合要求。
  • 校验方式不严谨:使用assert做业务校验,Python开启优化模式时assert会被忽略,导致校验逻辑失效。
  • 拼写错误:penalty拼写为penanlty,虽不影响运行但不符合规范。
修改后的代码
def calculate_mark(s):
    parts = s.split()
    # 校验输入拆分后必须是3个字段
    if len(parts) != 3:
        raise SyntaxError
    student_number = parts[0]
    # 校验分数、扣分项为合法整数
    try:
        student_mark = int(parts[1])
        student_penalty = int(parts[2])
    except ValueError:
        raise SyntaxError
    # 校验扣分值不大于原始分数
    if student_penalty >= student_mark:
        raise ValueError
    # 计算返回结果
    final_mark = student_mark - student_penalty
    return f"{student_number} {final_mark}"
修改说明
  • 所有格式不符合要求的场景(字段数不对、分数/扣分项不是整数)都会直接抛出SyntaxError,满足测试要求,测试用例calculate_mark("john xx 30")会因为第二个字段无法转为整数触发SyntaxError。
  • 扣分值大于等于原始分数时直接抛出ValueError,符合需求。
  • 移除了assert和异常捕获逻辑,所有异常都会正常向上抛出,测试可以正常捕获校验结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:01