Python编写含if与绝对值的函数时跳过if直接执行else的问题排查
错误原因分析
你的代码存在语法错误和类型判断逻辑错误两类问题,最终导致if条件永远不触发,甚至运行时会直接报错:
- 类型判断逻辑完全错误
你写的type(a) == type(int)判断逻辑不成立:int本身是Python内置的类型类,type(int)返回的是<class 'type'>(也就是类型本身的类型),和你传入的整数、浮点数的类型完全不匹配。比如传入整数5时,type(5)的结果是<class 'int'>,和type(int)的结果永远不相等,所以if条件恒为False,会直接走else分支。
正确的类型判断写法可以用type(a) == int or type(a) == float,更推荐兼容性更好的isinstance(a, (int, float)),后者可以兼容int、float的子类场景。 - if语句末尾漏写冒号
:
Python的分支、循环、函数定义等语句末尾必须加冒号标识代码块开始,你的if判断行末尾没有冒号,运行时会直接触发SyntaxError语法错误。 - if代码块和else之间插入了无关代码,语法不合法
你在if的return语句之后、else之前多写了一行print(a),这行代码不属于if块也不属于else块,放在两者中间不符合Python语法规则,同样会触发SyntaxError。
修正后代码
def dist_frm_zero(a): # 类型校验用isinstance更稳妥 if isinstance(a, (int, float)): return abs(a) # 类型不匹配时的逻辑 print(a) print('not possible')
内容的提问来源于stack exchange,提问作者Abigail Boateng Gyasi
相关产品推荐
相关产品推荐

