![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
В тему исключений (а то я стесняюсь заводить по 10 тем в день).
Как повесить на исключение дополнительную информацию? А то получается такая фигня:
Совмещение подхода исключений и кодов ошибок в одном флаконе! -------------------- |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Вообще-то обычно строку (как сообщение об ошибке) передают в исключение. Но можно и номер ошибки в строку перевести...
... |
TarasBer |
![]()
Сообщение
#3
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Но можно и номер ошибки в строку перевести...
А перевести что-то посложнее, типа структуру какую-нибудь? Кроме побайтового отображения в строку мне ничего в голову не приходит, может, дельфиновый опыт так сказывается. Но всё это очень небезопасно и бесконтнольно, и контролируемые объекты таким образом лучше не передавать. А если бы компилятор знал, что с данным типом исключения всегда идёт такая-то структура, то можно было бы на стадии компиляции отследить. -------------------- |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Но всё это очень небезопасно и бесконтнольно, и контролируемые объекты таким образом лучше не передавать. Вот именно поэтому Ада не позволяет передавать ничего, кроме строки. Кому-то захочется передавать лимитированные типы, кому-то - тип функциональный, кто-то задумает тэговый передать... А там, глядишь, недалеко и до типов, экспортированных из других языков. Это что будет в результате? Анархия.По-моему, кто-то опять забыл, что такое исключение. Это не механизм для передачи информации из одной части программы в другую. Это - механизм для оповещения, что на каком-то этапе произошла ошибка, и дальнейшая обработка информации - бессмысленна, надо либо повторить попытку, либо завершить программу. Всё, больше исключения не должны использоваться ни для чего. А для оповещения достаточно передать строку с описанием исключительной ситуации. В самом крайнем случае можно передать в виде строки код ошибки, или индекс ошибочного элемента в каком-нибудь хранилище (желательно - глобальном, ибо при использовании локального к нему может не быть доступа в той точке, где исключение поймается). Но передавать сам элемент - этого в языке не было и не будет никогда. И я это поддерживаю. Хотя попытки реализаций передачи объектов, разумеется были. Если интересно - попробую найти, где-то у меня есть в загашниках... Тему разделил. |
TarasBer |
![]()
Сообщение
#5
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
В общем, я у всего парсера оставил только одно исключение.
А в каждой структуре, хранящей функцию, завёл поле, в котором хранится подробная информация об ошибке. -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 5:40 |