str 索引必须是整数"是什么意思?

1 投票
3 回答
5930 浏览
提问于 2025-04-15 22:04

我正在使用 jython 中的字典,这些字典是通过导入或解析 JSON 创建的。在处理某些部分时,我看到以下信息:

TypeError: str indices must be integers

这个问题发生在我做类似下面的事情时:

if jsondata['foo']['bar'].lower() == 'baz':
    ...

其中 jsondata 看起来像:

{'foo': {'bar':'baz'} }

这是什么意思,我该如何解决呢?

3 个回答

1

其实你的说法应该会引发一个 SyntaxError: can't assign to function call 的错误,因为你缺少一个 =,所以你做的是赋值,而不是在检查两个东西是否相等。

由于我在运行你提供的代码时没有遇到 TypeError,我猜测你应该先修复缺少的 =,然后再看看 Stacktrace(错误追踪信息)上说了什么。

不过也有可能你的 jsondata 还没有被解码,所以它仍然是普通文本,这样的话就会引发索引错误。

3

正如Marcelo和Ivo所说,你似乎是在尝试直接使用原始的JSON字符串,但没有先通过 json.loads(my_json_string) 将它转换成Python可以理解的格式。

2

在从字典里获取数据之前,你需要先检查一下这个东西是不是字典类型,并且要确认里面有没有'z'这个键。

>>> jsondata = {'a': '', 'b': {'z': True} }
>>> for key in jsondata:
...     if type(jsondata[key]) is dict and 'z' in jsondata[key].keys() and jsondata[key]['z'] is True:
...         print 'yes'
...
yes
>>>

或者可以用更简短的方法,直接用字典的get函数。

>>> jsondata = {'a': '', 'b': {'z': True}, 'c' :{'zz':True}}
>>> for key in jsondata:
...     if type(jsondata[key]) is dict and jsondata[key].get('z',False):
...         print 'yes'
...
yes
>>>

撰写回答