TypeError: 字符串索引在 Python 中必须是整数
TypeError: string indices must be integers in Python
当我们使用非整数值访问索引处的字符串时,会出现 Python“TypeError: string indices must be integers”。要解决该错误,请确保在访问特定索引处的字符串时使用整数(例如)my_str[2]
或切片(例如)。my_str[0:3]
下面是错误如何发生的示例。
my_str = 'hello' # 👇️ this is also a string my_index = '1' # ⛔️ TypeError: string indices must be integers result = my_str[my_index]
我们尝试使用字符串索引,但这是不允许的。
如果您有一个包含在字符串中的整数,请使用int()
该类对其进行转换。
my_str = 'hello' my_index = '1' # ✅ convert str to int result = my_str[int(my_index)] print(result) # 👉️ 'e'
my_str[2]
)或切片(例如)作为字符串索引。 my_str[0:2]
如果打印在方括号之间传递的值的类型,则它不会是整数。
example = '1' print(type(example)) # 👉️ <class 'str'>
如果您需要获取字符串的一部分,请使用冒号分隔开始和结束索引。
my_str = 'hello world' # 👇️ from index 0 (inclusive) to 5 (exclusive) print(my_str[0:5]) # 👉️ 'hello' # 👇️ from index 6 (inclusive) to end print(my_str[6:]) # 👉️ 'world'
第一个示例展示了如何从字符串中获取前 5 个字符,第二个示例展示了如何从索引 6 处的字符开始。
如果您需要迭代具有索引的字符串,请使用该enumerate()
函数。
my_str = 'hello' for idx, char in enumerate(my_str): print(idx, char) # 👉️ 0 h, 1 e, 2 l, 3 l, 4 o
idx
变量存储当前迭代的索引,变量char
存储相应的字符。
如果您打算声明一个存储键值对的变量,请改用字典。
my_dict = {'name': 'Alice', 'age': 30} print(my_dict['name']) # 👉️ 'Alice' print(my_dict['age']) # 👉️ 30
如果您需要遍历字典,请使用该items()
方法。
my_dict = {'name': 'Alice', 'age': 30} for key, value in my_dict.items(): print(key, value) # 👉️ name Alice, age 30
The dict.items
method returns a new view of the dictionary’s items ((key, value) pairs).
If you got the error when working with a JSON string, make sure to parse the
JSON into a native Python object before accessing specific items.
import json my_json = json.dumps( ['apple', 'banana', 'kiwi'] ) print(type(my_json)) # 👉️ <class 'str'> # ✅ convert to native Python object my_list = json.loads(my_json) print(my_list[0]) # 👉️ 'apple' print(my_list[1]) # 👉️ 'banana' print(type(my_list)) # 👉️ <class 'list'>
The json.loads method
parses a JSON string into a native Python object.
Conversely, the
json.dumps method
converts a Python object to a JSON formatted string.
You can use the enumerate()
function if you need to access the index while
iterating over a list.
my_list = ['a', 'b', 'c'] for idx, elem in enumerate(my_list): print(idx, elem) # 👉️ 0 a, 1 b, 2 c
If you aren’t sure what type of object a variable stores, use the type()
class.
my_str = 'hello' print(type(my_str)) # 👉️ <class 'str'> print(isinstance(my_str, str)) # 👉️ True my_dict = {'name': 'Alice', 'age': 30} print(type(my_dict)) # 👉️ <class 'dict'> print(isinstance(my_dict, dict)) # 👉️ True
类型类返回对象的类型。
如果传入的对象是传入类的实例或子类,则isinstance
函数返回。True
结论
当我们使用非整数值访问索引处的字符串时,会出现 Python“TypeError: string indices must be integers”。要解决该错误,请确保在访问特定索引处的字符串时使用整数(例如)my_str[2]
或切片(例如)。my_str[0:3]