Свой Exception (с шахматами и поэтессами)

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Свой Exception (с шахматами и поэтессами)

Сообщение Brainenjii » 29.03.2012 15:35:16

Захотел расширить стандартный Exception кодом ошибки.
Код: Выделить всё
Type

{ BExceptionClass }

BExceptionClass = Class(Exception)
  Private
    bCode: Integer;
  Public
    Property Code: Integer Read bCode;
    Constructor Build(Const aCode: Integer; Const aMessage: String);
    Constructor Build(Const aCode: Integer; Const aMessageMask: String;
      Const aParams: Array Of Const);
    Destructor Burn;
End;
..
Constructor BExceptionClass.Build(Const aCode: Integer; Const aMessage: String);
Begin
  bCode := aCode;
  Inherited Message := aMessage;
End;

Constructor BExceptionClass.Build(Const aCode: Integer;
  Const aMessageMask: String; Const aParams: Array Of Const);
Begin
  bCode := aCode;
  Inherited Message := Format(aMessageMask, aParams);
End;

Всё хорошо, но как теперь в одном Try'e обрабатывать 2 типа Exception'a?
Код: Выделить всё
Begin
Try
  Case Random(3) Of
    0: StrToInt('blah');
    1: Raise BExceptionClass.Build(147, 'Тупо не повезло');
    2: WriteLn('Epic win');
    Else
      Raise BExceptionClass.Build(148, 'WTF?!!!111oneone');
  End;
Except On E: BExceptionClass Do
  WriteLn(E.Code, ' :: ', E.Message);
End;

Вариант с
Код: Выделить всё
Except On E: Exception Do
  If E Is BExceptionClass Then WriteLn(BExceptionClass(E).Code, ' :: ', E.Message)
  Else WriteLn('-1 :: ', E.Message);

представляется несколько громоздким... Вложенный Try - ещё хуже... Нет ли способа адекватней?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Свой Exception (с шахматами и поэтессами)

Сообщение kipar » 29.03.2012 15:51:03

A
Код: Выделить всё
Try
...
Except
  On E: BExceptionClass Do
    WriteLn(E.Code, ' :: ', E.Message);
  on E: Exception do
    WriteLn(E.Message);
End;

не работает?
kipar
новенький
 
Сообщения: 78
Зарегистрирован: 04.03.2010 12:15:54

Re: Свой Exception (с шахматами и поэтессами)

Сообщение Brainenjii » 29.03.2012 16:18:02

Вот примерно это я и хотел увидеть ^_^ Спасибо. Как-то ещё краче это можно реализовать?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Свой Exception (с шахматами и поэтессами)

Сообщение kipar » 29.03.2012 17:53:12

Я не понимаю что значит еще краче? Чтобы одним оператором оба типа исключений обрабатывать? Тогда наверное в конструкторе присвоить Message := IntToStr(Code)+'::'+Message;
kipar
новенький
 
Сообщения: 78
Зарегистрирован: 04.03.2010 12:15:54


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru