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
关键说明
- 无参数判断:通过
if not args直接检查是否有传入参数,覆盖场景1。 - 合并类型校验:把
list/set/tuple/str/float打包进元组INVALID_TYPES,一次isinstance调用就能完成所有非法类型的判断,同时覆盖场景2和3。 - 布尔值处理:如果需要排除布尔值(比如
True/False会被识别为int子类),可以单独加判断,或者直接把bool加入INVALID_TYPES元组。
测试用例验证
add()→ 抛出ValueError,符合场景1add([1,2])→ 抛出TypeError,符合场景2add("5")/add(3.14)→ 抛出TypeError,符合场景3add(1,2,3)→ 返回6,正常运行
内容的提问来源于stack exchange,提问作者Cory Blake
相关产品推荐
相关产品推荐

