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

如何修复Try/Except处理逻辑,实现正整数输入校验?

修正Try/Except机制下的正整数输入校验函数

原代码存在几个问题导致无法正确触发异常或逻辑错误,以下是修正方案:

原代码的核心问题

  1. return语句缩进错误:return不在函数块内,会引发语法错误。
  2. 正整数判断逻辑遗漏:仅判断n < 0,但0也不属于正整数,应该覆盖n <= 0的情况。
  3. 负号数字字符串处理不当: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:30:59