Была у меня сходная задача - импорт данных из экселевских таблиц. Каждое чтение оформлялось в виде таких требований: p2type = row.known("Type", alltypes) content = row.nonempty("Content") ... Всё это сидело в замыканиях, а над замыканиями хитрый map. В случае невозможности выполнить требование автоматически создавалось человекочитаемое сообщение об ошибке, с координатами листа, (опционально) ряда и (опционально) столбца. И бросалось в виде исключения. Хитрый map исключения ловил, текст ошибки в окно репорта направлял, а также принимал решение в зависимости от координат ошибки - продолжить импорт со следующего ряда, со следующего листа, или вообще остановить процесс импорта.
Так обработка всех видов Bad ушла из юзерского кода в требования и контекст обхода.
no subject
Date: 2014-03-11 01:10 pm (UTC)Была у меня сходная задача - импорт данных из экселевских таблиц. Каждое чтение оформлялось в виде таких требований:
p2type = row.known("Type", alltypes)
content = row.nonempty("Content")
...
Всё это сидело в замыканиях, а над замыканиями хитрый map. В случае невозможности выполнить требование автоматически создавалось человекочитаемое сообщение об ошибке, с координатами листа, (опционально) ряда и (опционально) столбца. И бросалось в виде исключения. Хитрый map исключения ловил, текст ошибки в окно репорта направлял, а также принимал решение в зависимости от координат ошибки - продолжить импорт со следующего ряда, со следующего листа, или вообще остановить процесс импорта.
Так обработка всех видов Bad ушла из юзерского кода в требования и контекст обхода.