


enumerate() выдаёт пару из счётчика и элемента. Если в сообщении об ошибке нужно назвать строку исходного файла, запускайте нумерацию до фильтрации. Если нужен порядковый номер в готовом списке, сначала отберите строки. На Mentoring.digital разберём разницу на трёх строках данных.
В учебном примере заголовок файла уже прочитан. Первая запись в списке соответствует второй строке файла. Поэтому начинаем с start=2, а пустую запись пропускаем внутри цикла.
rows = ["Anna", "", "Ilya"]
for line_no, name in enumerate(rows, start=2):
if not name:
continue
print(line_no, name)
# 2 Anna
# 4 Ilya
Пустая строка всё равно получила номер 3 в момент обхода. Если вместо пропуска нужно вывести ошибку, её можно привязать к этому номеру. Значение start задаёт первую отметку счётчика. Сам обход по-прежнему начинается с первого элемента переданного источника.
filled = (name for name in rows if name)
for position, name in enumerate(filled, start=1):
print(position, name)
# 1 Anna
# 2 Ilya
Здесь enumerate видит только непустые записи. Такая нумерация подойдёт для интерфейса, где позиции должны идти подряд. Для ссылки на входной файл сохраните исходный номер отдельным полем.
Добавьте пустую строку перед первой записью. В первом варианте номер записи увеличится, во втором останется прежним. Затем попробуйте передать итератор строк из файла. Когда источник уже исчерпан, для повторной нумерации понадобится заново открыть его или использовать сохранённые значения.
Работу со строками и итераторами можно закрепить на курсе Python с практикой. Проверку загрузчика и формулировки ошибок удобно разобрать с ментором по разработке на Python.