前言
其实就是个小问题,但是爆出来的时候也很莫名其妙。因为之前都跑得好好的,只是换了不同的文件去跑才出的问题,关键是不同的文件要处理的内容和格式都是完全一样的,一个顺利跑完,一个就报TypeError: ‘float’ object is not subscriptable这个错,就非常无语。接下来就是看看怎么解决问题了:
一开始自然是直接搜索问题,寻找解决办法,实话实说,看了一些博客,但是并没有直接找到解决办法,但是从中获得了一些想法,对问题理解更清楚一点。下面是找到的一种解释:
然后说一下我的具体应用:
我需要从预测生成的 json文件获取预测分数score和预测位置(坐标值)把它们写入txt文档:
ff = open('xx.txt','w') for anno in annos: score = anno['score'] left,top,right,bottom = anno['box'] ff.write("%s %s %s %s %s\n" %(score[:6], str(int(left)), str(int(top)),str(int(right)),str(int(bottom)))) ff.close()
json文件内容格式:
{ "annos":[ { "score":0.999976544, "box":[ 145.436234753274657 456.312645236453657 254.327564356457435 553.957943578765678 ] }, { "score":0.9996542376, "box":[ 344.436234753274657 987.312645236453657 423.327564356457435 234.957943578765678 ] }, ... ] }
具体问题是在执行写入的时候出现的:
ff.write("%s %s %s %s %s\n" %(score[:6], str(int(left)), str(int(top)),str(int(right)),str(int(bottom))))
一开始我的关注点是放在box的内容读取上,他是四个浮点数位于一个列表下,而且搜到的方法也和列表内容相关
后面通过我的控制变量试验后发现这里是没问题的,所以问题就是score[:6]的写入报了错
我的解决办法是:
"""先把读取到的score转化为字符,再进行写入""" xx = str(anno['score']) ff.write("%s %s %s %s %s\n" %(xx[:6], str(int(left)), str(int(top)),str(int(right)),str(int(bottom))))
如上就可以顺利执行了,没报TypeError: ‘float’ object is not subscriptable
原先想过,直接把str加在最后一句上,即:
ff.write("%s %s %s %s %s\n" %(str(score[:6]), str(int(left)), str(int(top)),str(int(right)),str(int(bottom))))
发现还是会报错,也就是说直接写的时候读的不能是浮点型数据(可能是此处直接从annos的列表中读取出来的浮点数据不能直接处理),即使经过中间处理也不行,需要转化为字符型后再写入即可解决
其实这个问题更像一个bug,并不是一定会出现的问题,如果报错了,
就要花时间解决一下。
总结
到此这篇关于Python TypeError: ‘float‘ object is not subscriptable错误解决的文章就介绍到这了,更多相关TypeError: ‘float‘ object is not subscriptable内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!