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}")
再给你解释下关键的修改点:
- 规范异常类命名:
IllegalMarkError这个名字清晰传达了异常的用途,一眼就能知道是处理非法分数的错误。 - 带消息的异常实例:抛出异常时传入错误消息,捕获的时候用
as e拿到异常对象,就能把具体的提示打印给用户,比单纯的“Invalid mark”更友好。 - 统一变量名:把所有分数相关的变量都改成
mark,遵循PEP8的变量命名规则(全小写,必要时用下划线分隔)。 - 增加成功反馈:跳出循环后添加了合法分数的提示,让流程更完整。
这样修改后,代码不仅功能正常,还更符合Python的编码规范,用户体验也更好~
内容的提问来源于stack exchange,提问作者H.R
相关产品推荐
相关产品推荐

