powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / [Lazarus/Delphi] Как ловить сразу несколько исключений?
25 сообщений из 40, страница 1 из 2
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654548
Гвость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли ловить сразу три разных исключения? Как-то типа такого:
Код: pascal
1.
2.
3.
4.
5.
6.
try
    ...
except
    on EOne, ETwo, EThree do
        ...
    end;
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654555
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ГвостьМожно ли ловить сразу три разных исключения? Как-то типа такого:
Код: pascal
1.
2.
3.
4.
5.
6.
try
    ...
except
    on EOne, ETwo, EThree do
        ...
    end;


а ты подумал уже, как ты внутри блока будешь понимать, какое исключение сработало ?
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654559
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гвость,

AFAIR, если ETwo и EThree - наследники EOne, то конструкция
Код: pascal
1.
on E: EOne do ...

будет реагировать и на них тоже.

Еще можно использовать совет отсюда :
Код: pascal
1.
2.
3.
4.
5.
except
  on E: Exception do
    if (E is EOne) or (E is ETwo) or (E is EThree) then 
      ...
    else ...
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654561
Гвость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator , дак в том-то и нюанс - мне и не нужно понимать какое из трёх (или более) сработало.
Надо выполнить абсолютно одно и то же действие при любом из указанных исключений.

Конечно можно и вот так, но не будет ли как-то криво?:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure ...
    procedure OnMyExps();
    begin
    ...
    end;
begin
try
    ...
except
    on EOne do
        OnMyExps();
    on ETwo do
        OnMyExps();
    on EThree do
        OnMyExps();
    end;
end;



P.S. Нет, не наследники.
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654564
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гвость,

Можно как вы написали, можно как я выше писал:
Проверил, в XE2 работает
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
program ExceptTest;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

type
  EOne = class(Exception);
  ETwo = class(Exception);
  EThree = class(Exception);

begin
  try
//    raise EOne.Create('Error Message');
//    raise ETwo.Create('Error Message');
//    raise EThree.Create('Error Message');
    raise Exception.Create('Error Message');
  except
    on E: Exception do
      if (E is EOne) or (E is ETwo) or (E is EThree) then
        Writeln('Hey! It''s my Exception!')
      else Writeln(E.ClassName, ': ', E.Message);
  end;
  ReadLn;
end.

...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654565
Гвость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть сам язык не позволяет? Просто раз в Case можно... через запятую-то... подумал и тут как-то можно...
Ладно, да будем так, спасибо большое!
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654567
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Гвость defecator , дак в том-то и нюанс - мне и не нужно понимать какое из трёх (или более) сработало.
Надо выполнить абсолютно одно и то же действие при любом из указанных исключений.

Конечно можно и вот так, но не будет ли как-то криво?:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure ...
    procedure OnMyExps();
    begin
    ...
    end;
begin
try
    ...
except
    on EOne do
        OnMyExps();
    on ETwo do
        OnMyExps();
    on EThree do
        OnMyExps();
    end;
end;



этот вариант мне нравится больше остальных
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654600
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не люблю локальные (в функциях) функции.
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654607
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__,

зря. бывает очень удобно. код разгрузить.
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654609
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon,

да, бывает. Но - не люблю. Сколько раз видел, как люди фигню с ними творили.
Например, локальные переменные во внутренних функциях одинаково с локальными во внешних называли и путались.
Или специально во вложенных функциях использовали локальные переменные внешних функций.
Эдакий локальный быдлокод, короче.
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654699
AWSVladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__makhaon,
да, бывает. Но - не люблю. Сколько раз видел, как люди фигню с ними творили.
Эдакий локальный быдлокод, короче.
Откройте для себя венгерскую нотацию или примите корпоративный стандарт написания.
Плюсом используйте форматер кода. Форматер можно настроить под себя, анти-корпоративный (когда из репозитария исходники получаем) и корпоративный, когда обратно в репозиторий заливаем.
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39654748
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в частности именно возможностью спрятать в себе локальные переменные, особенно кучу неявных от управляемых типов к-е порой бестолково дают просадку производительности, вложенные ф-ии и хороши
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655193
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorГвость defecator , дак в том-то и нюанс - мне и не нужно понимать какое из трёх (или более) сработало.
Надо выполнить абсолютно одно и то же действие при любом из указанных исключений.

Конечно можно и вот так, но не будет ли как-то криво?:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure ...
    procedure OnMyExps();
    begin
    ...
    end;
begin
try
    ...
except
    on EOne do
        OnMyExps();
    on ETwo do
        OnMyExps();
    on EThree do
        OnMyExps();
    end;
end;



этот вариант мне нравится больше остальных
зря, как говорится "найди ошибку и больше так не делай", я один раз целый день потратил из-за такого
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655195
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
kealon(Ruslan)defecatorпропущено...


этот вариант мне нравится больше остальных
зря, как говорится "найди ошибку и больше так не делай", я один раз целый день потратил из-за такого

отладчик не дебажил ? бывает )
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655197
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorотладчик не дебажил ? бывает )покажи сенсей где растёт трава ;-)
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655204
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кагбе молчком сглатывать необработанные исключения - порочная практика...
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655207
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,
:-)
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655208
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerкагбе молчком сглатывать необработанные исключения - порочная практика...Где в коде гасятся исключения?
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655210
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_white_niggerкагбе молчком сглатывать необработанные исключения - порочная практика...Где в коде гасятся исключения?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
except
    on EOne do
        OnMyExps();
    on ETwo do
        OnMyExps();
    on EThree do
        OnMyExps();
    end;
// <- вот здесь (EOutOfMemory, EAccesViolation, EEtc...
end;
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655213
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
alekcvp_Vasilisk_пропущено...
Где в коде гасятся исключения?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
except
    on EOne do
        OnMyExps();
    on ETwo do
        OnMyExps();
    on EThree do
        OnMyExps();
    end;
// <- вот здесь (EOutOfMemory, EAccesViolation, EEtc...
end;



можно и вот так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
try
  ...
except
    on EOne do
        OnMyExps();
    on ETwo do
        OnMyExps();
    on EThree do
        OnMyExps();
    end;
  ...
else
  raise;
end;
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655599
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
except
    on EOne do
        OnMyExps();
    on ETwo do
        OnMyExps();
    on EThree do
        OnMyExps();
    end;
// <- вот здесь (EOutOfMemory, EAccesViolation, EEtc...
end

Что за бред?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
{$APPTYPE CONSOLE}
program Test;

uses
  System.SysUtils;
  
{$R+}

var
  Data: array[0..0] of Integer;
  i: Integer;
begin
  try
    i := 10;
    Data[i] := 5;
  except
    on E: EConvertError do
      Writeln('EConvertError')
  end;
  Writeln('End test');
end.

Test.exe >1 2>&1Exception ERangeError in module Test.exe at 0001D574.
Range check error.
Блок except обрабатывает
Код: pascal
1.
только

те исключения, которые были указаны. Остальные пропускаются дальше. Никто никого не гасит.
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655601
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorможно и вот так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
try
  ...
except
  ...
else
  raise;
end;

Можно. Но зачем?
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655613
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
_Vasilisk_defecatorможно и вот так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
try
  ...
except
  ...
else
  raise;
end;


Можно. Но зачем?
синтаксис позволяет
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655631
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorсинтаксис позволяеттак тоже позволяет
Код: pascal
1.
if MyVar = True then
...
Рейтинг: 0 / 0
[Lazarus/Delphi] Как ловить сразу несколько исключений?
    #39655634
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
_Vasilisk_defecatorсинтаксис позволяеттак тоже позволяет
Код: pascal
1.
if MyVar = True then


и что ?
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / [Lazarus/Delphi] Как ловить сразу несколько исключений?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]