• TypeError: ‘float‘ object is not subscriptable 已解决


    其实就是个小问题,但是爆出来的时候也很莫名其妙。因为之前都跑得好好的,只是换了不同的文件去跑才出的问题,关键是不同的文件要处理的内容和格式都是完全一样的,一个顺利跑完,一个就报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()
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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
    				]
    		},
    		...
    	]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    具体问题是在执行写入的时候出现的:

    ff.write("%s %s %s %s %s\n" %(score[:6], str(int(left)), str(int(top)),str(int(right)),str(int(bottom))))
    
    • 1

    一开始我的关注点是放在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))))
    
    • 1
    • 2
    • 3

    如上就可以顺利执行了,没报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))))
    
    • 1

    发现还是会报错,也就是说直接写的时候读的不能是浮点型数据可能是此处直接从annos的列表中读取出来的浮点数据不能直接处理),即使经过中间处理也不行,需要转化为字符型后再写入即可解决

    其实这个问题更像一个bug并不是一定会出现的问题,如果报错了,
    就要花时间解决一下。

  • 相关阅读:
    【算法】算法基础课模板大全
    地图数据设计(四):地图比例尺
    VSS、VDD、VBAT、VSSA
    【刷题】NC50 链表中的节点每k个一组翻转
    cookie,storage,sesstion区别
    【Java】java | CacheManager | redisCacheManager
    结构体——C语言初阶
    css学习心得
    Angular:通过路由切换页面后,ngOnInit()不会被触发的问题
    多屏异显方案-瑞芯微RK3568开发板
  • 原文地址:https://blog.csdn.net/qq_44442727/article/details/126479409