如何修复Try/Except处理逻辑,实现正整数输入校验?
修正Try/Except机制下的正整数输入校验函数
原代码存在几个问题导致无法正确触发异常或逻辑错误,以下是修正方案:
原代码的核心问题
- return语句缩进错误:return不在函数块内,会引发语法错误。
- 正整数判断逻辑遗漏:仅判断
n < 0,但0也不属于正整数,应该覆盖n <= 0的情况。 - 负号数字字符串处理不当:
isdigit()无法识别带负号的数字(如"-5"),会错误触发TypeError,而这类输入实际属于非正整数,应触发ValueError。
修正后的代码
def userInput(): while True: try: n = input("How many times do you want to roll the dice? ") # 先判断是否为纯数字字符串(不含负号) if not n.isdigit(): # 单独处理带负号的数字字符串 if n.startswith("-") and n[1:].isdigit(): raise ValueError else: raise TypeError n_int = int(n) # 校验是否为正整数(排除0和负数) if n_int <= 0: raise ValueError return n_int except ValueError: print("Please enter a positive integer") except TypeError: print("Only positive integers allowed")
关键修正点说明
- 修复缩进:将
return语句移至函数内部,与while循环同级,确保验证通过后正常返回结果。 - 完善正整数判断:将
n < 0改为n_int <= 0,确保0和负数都会触发ValueError。 - 优化异常触发逻辑:对带负号的数字字符串单独判断,直接抛出ValueError,避免错误归类到TypeError中,让异常类型与错误场景匹配。
内容的提问来源于stack exchange,提问作者itzMeep
相关产品推荐
相关产品推荐

