Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как анализировать отловленный exception? Есть ли у Exception цифровые коды? 
:(
    Опции темы
кварк
Дата 26.11.2004, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 2.8.2002

Репутация: нет
Всего: нет



Мучаюсь вопросом: ловлю exception.

Код

try
 . . .
except
 on e:exception do ShowMessage(e.Message);
end;


А как проанализировать, какое именно исключение поймано? Неужели строки сравнивать? Так при разных локальных установках, строки Message, видимо, тоже разными будут (мной лично не проверено). Как быть? Может, есть какой-нибудь числовой идентификатор, которого я не нашел?
PM MAIL   Вверх
SPrograMMer
Дата 26.11.2004, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: 2
Всего: 6



Строки сравнивать это уж сильно smile !
Каждое Exception принадлежит какому-то классу, например,

Код

...
On EDivByZero Do ...  // Было деление на нуль
On EStackOverflow Do ...  // Переполнение стека
On EConvertError Do ... // было неверное приведение типа
//И т.д.
Else // Было другое исключение
End;


Это сообщение отредактировал(а) SPrograMMer - 26.11.2004, 09:45


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
кварк
Дата 26.11.2004, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 2.8.2002

Репутация: нет
Всего: нет



Э... А если я не знаю класса? Хотя знаю, дебагер выдает: EOleException. А уж у этого класса есть ErrorCode. Его, по всей видимости, и надо смотреть. Ведь так? :-)
PM MAIL   Вверх
<Spawn>
Дата 26.11.2004, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Зачем тебе код ошибки? Забудь про них. Экземпляр класса ошибки уже дает понять в чем дело. Например:

Код

on E: EDivByZero do
 //Понятно что произошло деление на ноль


Аналогичный вариант:

Код

on E: Exception do
 if E is EDivByZero then //можешь себе тут представить что if E = <Код деления на 0> then ...
   ...


Цитата
Э... А если я не знаю класса?
A если я не знаю кода ошибки? Ты должен предполагать возможные исключительные ситуации в зависимости от используемых обьектов и операций и использовать соответстующие классы ошибок для их идентификации .

Это сообщение отредактировал(а) <Spawn> - 26.11.2004, 12:02


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Alex
Дата 26.11.2004, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



кварк, а для чего именно ты хочешь отлавливать ошибку. Если для того, чтобы дать более понятное сообщение, то во первых можно перевести все тексты сообщений, которые имеются в Delphi (могу дать уже переведенные), во вторых можно к тому сообщению, которое у тебя имеется в e.Message в начало добавить осмысленный текст к примеру:
Код

try
...
// Запись в базу
...
except
on e:exception do ShowMessage('Произошла ошибка при записи в базу:'^M^Je.Message);
end;


Если ты хочешь получить всю информацию об ошибки и строке в модуле, где она произошла, после чего записать это в лог, то тут тебе поможет технология map-файлов.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
кварк
Дата 26.11.2004, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 2.8.2002

Репутация: нет
Всего: нет



Надо перебрать записи. Функция перебора (не мной написанная) возвращает исключение: нет больше записей. Если его поймаешь, то больше ничего делать не надо. А если я поймаю чего-то другое? - задумался я. То есть как-то надо отличить в общем то, нормальную ситуацию от ненормальной. Сделал как написал ранее, через ErrorCode:
Код

try
 цикл . . .
except
 on e: EOleException do if e.ErrorCode <> -2147024637 then tsl.Add('Ошибка [' + IntToStr(e.ErrorCode) + ']: ' + e.Message);
 on e: Exception do tsl.Add(' Ошибка: ' + e.Message);
end;

Вроде, работать будет достаточно надежно. Или я не прав?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.