Python try-except块未触发正确异常:输入非整数误报num2hgh错误
问题原因及解决方法
核心原因
你把num2hgh直接赋值为Exception,而ValueError是Exception的子类。Python的异常捕获是按代码中except块的顺序匹配的,当输入abc触发ValueError时,第一个except num2hgh(本质是捕获所有Exception类型的异常)会先接住这个子类异常,导致后续专门处理ValueError的except块根本不会执行。
解决方法
不要直接用内置的Exception作为自定义异常的类型,应该定义一个专属的自定义异常类:
# 自定义专属异常类,继承自Exception class NumTooHigh(Exception): pass txt = 'enter your grade ' while True: try: grade = int(input(txt)) print(grade) if grade > 100: raise NumTooHigh except NumTooHigh: txt = 'Grade to high, enter again: ' except ValueError: txt = 'Please enter an integer; ' else: break
这样NumTooHigh是独立的异常类型,只会捕获你主动抛出的这个异常,而ValueError会被对应的except块正确处理。
内容的提问来源于stack exchange,提问作者DCR
相关产品推荐
相关产品推荐

