Почему row[0] обращается к None объекту?

При обращении к элементу списка (или кортежа) с использованием индекса, как в случае row[0], Python ожидает, что в этом индексе будет находиться значение для выбранного элемента. Если значение для данного индекса не существует, Python возвращает None.

Индексация в Python начинается с 0, поэтому row[0] обращается к первому элементу списка. Если row является списком и значение None возвращается при обращении к row[0], это может быть обусловлено тем, что список row пустой или не содержит значения в первом элементе.

Например, если у вас есть список row = [], при обращении к row[0] вы получите None, так как в пустом списке нет элементов для доступа по индексу 0.

Чтобы избежать ошибки обращения к None объекту при доступе к элементам списка, всегда стоит проверять условия, например, с помощью конструкции if row:, чтобы удостовериться, что список не пустой перед обращением к его элементам.