Python -> TypeError:列表索引必须是整数,而不是 str
Posted
技术标签:
【中文标题】Python -> TypeError:列表索引必须是整数,而不是 str【英文标题】:Python -> TypeError: list indices must be integers, not str 【发布时间】:2018-08-09 08:39:25 【问题描述】:我在 python 中有一个列表/数组 str4,我想用一个我坚信是 int 的变量来访问它,因为我用函数 isdigit() 对其进行了测试strong> 并且我还进行了手动调试并检查了所有选项是否正确显示唯一的数字。
temp = "variableX"
file2 = open('file.txt','r')
for line in file2:
if line.find(temp) =! -1:
posArray = line.split(temp)[1][1:3]
if ")" in posArray:
posArray = posArray[:-1]
if posArray.isdigit():
num = posArray
print temp+"("+num+")"
print num
print str4[num]
上面的代码是用来调试的,我的问题在str4[num],上面代码的结果是:
variableX(1)
1
"this is position 1"
Traceback (most recent call last):
File "orderList.py", line34, in <module>
print str4[num]
TypeError: list indices must be integers, not str
为什么 num 是一个数字,但 python 告诉我它是一个字符串? 我做错了什么?
【问题讨论】:
你刚刚打开文件,你从来没有读过它'2'
和 2
不是一回事。它们都是数字,但第一个是string
,第二个是integer
。 line
默认是 string
,因为它是从文件中读取的。 num
最终成为 line
的一部分,所以它也是 string
。
在第 34 行之前使用 int(num) 将 num 转换为整数
【参考方案1】:
另一种解决方案是在
之后num = posArray
做:
print str4[int(num)])
【讨论】:
【参考方案2】:解释器永远不会出错...
更严重的是,你得到 num 作为子字符串,所以它是一个字符串。如果要将其用作字符串索引,则必须将其转换为 int:
num = int(posArray) # ok num is now an int
print temp+"("+str(num)+")" # must use str to concat it with strings
print num, type(num), posArray, type(posArray) # num is int, posArray is string
print str4[num] # now fine
【讨论】:
【参考方案3】:在下面使用我的 cmets 查看您的代码。从下往上阅读,了解如何轻松调试自己的代码;思考过程是什么。
temp = "variableX"
file2 = open('file.txt','r') # which is a file, so `line` is `string` - CASE CLOSED
for line in file2: # and `line` is a result of looping through `file2`
if line.find(temp) =! -1:
posArray = line.split(temp)[1][1:3] # and `posArray` is a part of `line`
if ")" in posArray:
posArray = posArray[:-1] # ok, `posArray` is a part of `posArray`
if posArray.isdigit(): # `posArray` contains digits only but that doesn't help really, so does "123"..
num = posArray # ok, so `num` is whatever `posArray` is
print temp+"("+num+")"
print num
print str4[num] # here is the Error so we start here and work backwards
我们在上面展示的是,最终,num
将与 line
(str
) 属于同一类型,因此不能用于 index
任何东西。必须先通过int(num)
将其转换为int
【讨论】:
【参考方案4】:您检查了字符串 posArray 是否为数字:
if posArray.isdigit():
num = posArray
但是你没有把它转换成数字,像这样:
if posArray.isdigit():
num = int(posArray)
【讨论】:
正是我所说的:)以上是关于Python -> TypeError:列表索引必须是整数,而不是 str的主要内容,如果未能解决你的问题,请参考以下文章
Python 酸洗错误:TypeError:对象泡菜未返回列表。 numpy的问题?
Python:无法替换列表中的项目,原因是:TypeError:列表索引必须是整数或切片,而不是 str
Python/Pandas TypeError:“列表”对象不可调用