为何Python中调用sum()处理字符串会出现两种不同错误提示?
为什么调用sum会出现两种不同的错误提示?
这两种错误提示的差异,核心是两个调用触发了sum函数不同的执行逻辑和错误分支:
第一种场景:
sum(("a", "b"))(即my_func的调用逻辑)sum函数的默认签名是sum(iterable, start=0),当只传入可迭代对象时,start参数默认取整数0。sum的执行流程是先将结果初始化为start的值,再依次累加可迭代对象中的元素。这里第一步就是尝试计算0 + "a",整数和字符串无法通过+运算符相加,因此抛出基础类型不兼容的错误:TypeError: unsupported operand type(s) for +: 'int' and 'str'第二种场景:
sum("a", "b")
这里的传参方式完全不同:第一个参数"a"是可迭代对象(字符串本身是可迭代的,会逐个返回字符),第二个参数"b"被当作了start参数传入。Python的sum函数内部有专门的逻辑检查:当检测到尝试对字符串进行求和操作时(无论是start为字符串,还是可迭代对象元素为字符串且start是默认的0),会抛出更针对性的友好提示,直接告知用户不能用sum处理字符串,并给出替代方案,因此错误提示为:TypeError: sum() can't sum strings [use ''.join(seq) instead]
内容的提问来源于stack exchange,提问作者User985468376
相关产品推荐
相关产品推荐

