← Все вопросы
TypeError: list indices must be integers or slices, not str — что не так?
11
Читаю строки из файла и хочу обратиться к полю:
row = line.split(",")
print(row["name"])
Получаю TypeError: list indices must be integers or slices, not str. Почему?
2 ответа
21
✓ Принятый ответ — помог автору
Вы перепутали список со словарём. split(",") возвращает список, а у списка элементы нумеруются числами: row[0], row[1], ... Строку-ключ туда подставить нельзя — отсюда «indices must be integers ... not str».
Если строка "Аня,15,Москва", то:
row = line.split(",")
name = row[0] # 'Аня'
age = row[1] # '15'
Имена полей (row["name"]) работают только если row — словарь. Если хочется обращаться по именам, можно собрать словарь самому или читать CSV через csv.DictReader, который как раз отдаёт строки в виде словарей.
6
По индексу — число. Для имён полей возьмите csv.DictReader.
Ваш ответ
Войдите, чтобы ответить на вопрос.