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

Python3自定义异常问题求助:分数范围校验代码报错排查

修复你的自定义异常代码问题

嘿,我来帮你捋捋这段代码里的小问题,以及怎么优化它~

你的代码思路是对的:用自定义异常处理非法分数输入,但有几个可以改进的地方,同时也是可能让你疑惑的点:

  • 异常类命名不规范:Python里自定义异常类通常用大驼峰命名法(比如IllegalMarkError),而不是小写的illegal,这样可读性更强,也符合PEP8编码规范。
  • 抛出异常的方式不够标准:你现在写的raise illegal是直接抛出异常类本身,虽然Python允许这种写法,但更规范的是抛出异常的实例,比如raise illegal(),甚至可以带上自定义错误消息。
  • 变量名大小写不一致:开头定义了mark = 0,后面又用了Mark,虽然这里没触发报错,但统一命名风格(比如全小写)会让代码更整洁。
  • 错误提示可以更具体:当前的提示只有“Invalid mark”,如果能告诉用户具体的范围要求,体验会更好。

下面是修正后的完整代码:

class IllegalMarkError(Exception):
    """自定义异常:用于处理分数不在0-100范围内的情况"""
    pass

while True:
    try:
        mark = int(input("Enter a mark out of 100 to see if it's valid or not: "))
        if mark < 0 or mark > 100:
            # 抛出带自定义消息的异常实例
            raise IllegalMarkError("Mark must be between 0 and 100 inclusive")
        break
    except IllegalMarkError as e:
        # 打印具体的错误提示
        print(f"Invalid mark: {e}")

# 跳出循环后输出合法的分数
print(f"Great! You entered a valid mark: {mark}")

再给你解释下关键的修改点:

  1. 规范异常类命名:IllegalMarkError这个名字清晰传达了异常的用途,一眼就能知道是处理非法分数的错误。
  2. 带消息的异常实例:抛出异常时传入错误消息,捕获的时候用as e拿到异常对象,就能把具体的提示打印给用户,比单纯的“Invalid mark”更友好。
  3. 统一变量名:把所有分数相关的变量都改成mark,遵循PEP8的变量命名规则(全小写,必要时用下划线分隔)。
  4. 增加成功反馈:跳出循环后添加了合法分数的提示,让流程更完整。

这样修改后,代码不仅功能正常,还更符合Python的编码规范,用户体验也更好~

内容的提问来源于stack exchange,提问作者H.R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:37:35