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

Python中add()函数异常处理优化:实现单次isinstance校验

优化整数相加add()函数的参数校验方案

核心问题修正

你之前尝试的isinstance(numbers, (list, set, tuple, string, float))失败,是因为Python里字符串类型是str而非string(string是模块名,不是内置类型)。修正这个点后,再结合无参数判断,就能实现一次isinstance调用完成多类型校验。

优化后的代码实现

def add(*args):
    # 处理场景1:无传入参数
    if not args:
        raise ValueError("至少需要传入一个整数参数")
    
    # 定义所有需要拦截的非法类型,覆盖场景2和3
    INVALID_TYPES = (list, set, tuple, str, float)
    total = 0
    
    for num in args:
        # 一次isinstance校验完成非法类型判断
        if isinstance(num, INVALID_TYPES):
            raise TypeError(f"参数 {repr(num)} 类型非法,仅接受整数类型")
        # 可选:排除布尔值(因为bool是int的子类,isinstance(True, int)返回True)
        if isinstance(num, bool):
            raise TypeError(f"参数 {repr(num)} 类型非法,仅接受整数类型")
        
        total += num
    return total

关键说明

  1. 无参数判断:通过if not args直接检查是否有传入参数,覆盖场景1。
  2. 合并类型校验:把list/set/tuple/str/float打包进元组INVALID_TYPES,一次isinstance调用就能完成所有非法类型的判断,同时覆盖场景2和3。
  3. 布尔值处理:如果需要排除布尔值(比如True/False会被识别为int子类),可以单独加判断,或者直接把bool加入INVALID_TYPES元组。

测试用例验证

  • add() → 抛出ValueError,符合场景1
  • add([1,2]) → 抛出TypeError,符合场景2
  • add("5")/add(3.14) → 抛出TypeError,符合场景3
  • add(1,2,3) → 返回6,正常运行

内容的提问来源于stack exchange,提问作者Cory Blake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:15:26