В процессе создания компонента для доступа к свойствам объекта-исключения я понял, что тот метод визуализации exception handling, который я избрал для пакета Python, не подходит для начинающих программистов, да и "опытным" программистам придётся не очень-то по вкусу. В связи с этим я решил обратиться к сообществу с предложением устроить "мозговой штурм" этой проблемы.
Некоторые замечания:
1) Важен порядок, в котором записаны обработчики исключений, ибо обработчик класса-родителя будет выбран для обработки классса-потомка, если встретится раньше
2) Важна прямая визуальная связь между компонентом Try..Except, защищаемым блоком (Try-блок), блоками "если что-то пошло не так" (Except-блоки), "если всё ок" (Else-блок) и "завершающим" блоком (Finally-блок) - иначе к чему весь огород
3) Важет доступ к членам классов-исключений: например, IOError содержит поля errno, filename и strerror, а ZeroDivisionException их не содержит. У всех (мыслимых) исключений есть поля args и message
4) Желательно разделить работу с исключениями на "простой" и "сложный" уровни. При "простой" обработке, в ответ на исключение (любое!) выдаётся строковое представление этого исключения. При "сложной" обработке у программиста есть возможность писать различные обработчики для различных исключений, с доступом к объекту-исключению.
В качестве затравки предлагаю свои размышления:
Схема I
Есть компонент Try, который начинает блок TryExcept (метод doTry), у него события onTry (вход в защищаемый блок), onExcept (в зависимости от св-ва "Режим" выдаёт либо строку, либо объект-исключение), onElse и onFinally - входы в соответствующие блоки. С точкой onExcept (при "сложной" обарботке) можно линковать только hub/hubEx либо компоненты-обработчики исключений (SomeError).
Есть (много) компонентов SomeError, которые имеют один метод doSomeError, одно событие onSomeError, плюс набор Var-точек для доступа к свойствам.
Плюс: визуальность сохранена (по большей части)
Минус: ограничения на горизонтальное подключение - этого в HiAsm еще не было (не считая пакета Web и контейнеров-коллекторов).
Схема II
В целом совпадает с первой, только компоненты Try и SomeError являются контейнерами a-la HTMLCollector, с фиксированными Work- и Event-точками.
Плюс: ещё больше визуальности
Минус: некая нестандартность подхода
Что скажет уважаемое сообщество? А может, у кого-нибудь есть ещё схемы? Буду рад услышать.
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
|
|||
карма: 1 |
|
Google
vip
|
#1.1контекстная реклама от партнеров
|
1