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

Posted 清梦枕星河~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()
	

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 运行 Matlab 脚本:TypeError: 'float' object is not iterable

【中文标题】从 Python 运行 Matlab 脚本:TypeError: \'float\' object is not iterable【英文标题】:Run Matlab script from Python: TypeError: 'float' object is not iterable从 Python 运行 Matlab 脚本:TypeError: 'float' object is not iterable 【发布时间】:2019-06-20 23:27:47 【问题描述】:

其实我从 Python 调用 Matlab 脚本时遇到了问题。

import matlab.engine

import os
import random
import numpy as np

a=[str(random.randint(1,3)) for _ in range(3)]
print(a)
eng=matlab.engine.start_matlab()
eng.cd("/Users/dha/Documents/MATLAB/test-matlab/",nargout=0)
sr, state=eng.test_func()
print(sr)
print(state)

实际上我想返回“sr”,它是一个浮点数和一个整数“状态”数组,例如sr = 34.31 和状态 = [1,2,5]。函数 test_func() 在 Matlab 上运行良好,但是当我从终端 (python test_matlab_engine.py) 在 Python 中运行它时,我收到以下错误:

Traceback (most recent call last):
  File "test_matlab_engine.py", line 10, in <module>
    sr, state=eng.mabuc_drl(a)
TypeError: 'float' object is not iterable

任何人请给我解决方案。非常感谢您。

【问题讨论】:

您也可以编辑以共享 MATLAB 代码吗?当我看不到引发异常的函数时,很难为您提供帮助 【参考方案1】:

从MATLAB到Python的结果好像被截断了。如果你有两个参数,你只能得到一个来自 MATLAB 的第一个参数。所以,问题是如何获取两个或多个参数。

总之,你应该把这个写在你的 Python 文件中:

re = eng.your_function_name(parameter1, parameter2, nargout=2)

其中re 包含两个来自 MATLAB 的参数。

您可以在官方文档中找到更多信息:Call MATLAB Functions from Python

【讨论】:

以上是关于TypeError: ‘float‘ object is not subscriptable 已解决的主要内容,如果未能解决你的问题,请参考以下文章

Python TypeError: 'float' object is not iterable ​

ErlangC 函数应用程序错误 - TypeError: 'numpy.float64' object is not iterable

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

python框架Scrapy报错TypeError: 'float' object is not iterable解决

python框架Scrapy报错TypeError: 'float' object is not iterable解决

基于Python贝叶斯优化XGBoost算法调参报错“TypeError: ‘float‘ object is not subscriptable”