Python转字符串报TypeError: 'float' object is not callable
报错根本原因
你的代码触发报错的核心是自定义变量名覆盖了Python的内置功能对象,和运算逻辑没有关系。
- Python本身内置了名为
str的函数,作用就是把其他类型的数据转换为字符串,也就是你代码里想用来做类型转换的那个str()方法。 - 你在代码第一行就写了
str=140,直接把这个内置函数的名字拿来当自己的普通变量用,给str赋值成了整数140。后续执行str = float(str)时,又把这个变量重新赋值为浮点数类型的140.0。到这一步,当前运行环境里str已经彻底不是原来的内置字符串转换函数了,它就是个值为140.0的浮点数。 - 等代码执行到
perc0 = str(perc0)这行时,Python会按照命名空间的查找规则,优先匹配你自己定义的str变量——也就是那个浮点数,浮点数是不能加括号像函数一样调用的,自然就抛出TypeError: 'float' object is not callable的错误。
代码里的其他隐藏问题
- 你写的
str0 = float(str0)在当前代码里运行会直接报NameError,因为你从头到尾没有给str0赋过初始值,属于写测试代码时漏写的基准赋值,后续需要补上这个变量的初始数值才能正常计算。 - 日常写代码尽量不要用Python的内置关键字当自定义变量名,和
str一样容易踩坑的名字还有int、float、list、dict、input等,一旦覆盖了内置功能,很容易出现逻辑完全对、但运行莫名报错的情况。
修正后的可运行示例
# 替换掉和内置名冲突的变量名,用语义化的命名 base_val = 160 # 计算的基准分母值,对应原来漏赋值的str0 current_val = 140 # 对应原来错误命名为str的数值 perc0 = 100 - (current_val * 100 / base_val) perc0 = int(perc0) # 截断取整数部分 perc0_str = str(perc0) # 此时调用的是正常的内置str转换函数 print(perc0_str)
内容的提问来源于stack exchange,提问作者Alessandro Tullini
相关产品推荐
相关产品推荐

