← Все вопросы

TypeError: list indices must be integers or slices, not str — что не так?

Задан 19 месяцев назад589 просмотров2 ответа
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.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект