Jupyter中将带M/K后缀的字符串转数字报UnboundLocalError如何解决
错误原因
- 函数中判断
'M'是否存在时,误用了未定义的局部变量out,应该以入参value作为判断依据 - 处理
M后缀的分支中,替换字符的操作也错用了未赋值的out - 原逻辑没有覆盖非字符串类型入参、字符串无M/K后缀的边界场景,会导致
out未定义就返回
修复后代码
def value_and_wage_conversion(value): # 入参不是字符串时直接转换为浮点型返回 if not isinstance(value, str): return float(value) # 根据后缀做单位转换 if 'M' in value: out = float(value.replace('M', '')) * 1000000 elif 'K' in value: out = float(value.replace('K', '')) * 1000 # 无后缀时直接转浮点型 else: out = float(value) return out # apply可直接传入函数名,无需额外封装lambda fifa_18['Value'] = fifa_18['Value'].apply(value_and_wage_conversion) fifa_18['Wage'] = fifa_18['Wage'].apply(value_and_wage_conversion)
补充说明
原报错的核心触发点是代码执行到if 'M' in out时,out还没有被赋值,Python找不到对应变量就抛出了UnboundLocalError。修复后的逻辑覆盖了所有可能的入参场景,不会再出现变量未定义的问题。
内容的提问来源于stack exchange,提问作者Yomibrain
相关产品推荐
相关产品推荐

