Раньше на тестовом задании я сразу бросался писать и к середине путался, что вообще от меня хотят. В этот раз сделал иначе: выписал вход, выход и граничные случаи. Звучит банально, но сэкономило часы и спасло от «решил не то». Радость от того, что код наконец совпал с условием.

Нейтрально: тестовое — это маленький проект; его разбивают на шаги, а не импровизируют. Уточняющие вопросы до старта — норма.

def parse_rows(text: str, sep: str = ",") -> list[list[str]]:
    # договоримся: пустые строки игнорируем
    return [line.split(sep) for line in text.splitlines() if line.strip()]

# тестовые "края", которые я выписал заранее:
print(parse_rows("a,b

c", sep=","))   # [['a','b'],['c']]

Победа не в скорости, а в точности: понял задачу → шаги → реализация → лёгкие тесты. Тестовые больше не «страшилка», а управляемый процесс, почти как любой из моих пeтов.