Python使用curve_fit拟合实验数据时报float与str不支持减运算错误
错误原因
你在打印拟合参数的循环中意外覆盖了全局变量p的原值:
- 最初定义的
p = 50是数值类型,用于Fabry_Perot函数的计算逻辑 - 后续打印循环写为
for v, p in enumerate(par):,此处的循环变量p会直接覆盖原数值型变量p,将其赋值为par列表中的字符串元素,循环结束后p最终为字符串'd' - 后续调用
Fabry_Perot函数时,执行到d*1000-p的计算逻辑,就出现了「浮点型不能和字符串做减法」的类型错误。
解决方法
将打印循环的变量名改为和全局变量不冲突的名称即可,示例修改如下:
# print fit parameters and uncertainties for v, par_name in enumerate(par): print(f"{par_name}: {rslt[v]} ± {err[v]}")
优化建议:可以修改
Fabry_Perot和guass_FP函数,把所有依赖的参数都显式作为入参传递,不要依赖全局变量,从根源上避免这类变量意外覆盖的问题。
内容的提问来源于stack exchange,提问作者aVral
相关产品推荐
相关产品推荐

