Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

Как подавить вывод сообщения об ошибке.   Найти похожие ветки 

 
Sergeyy   (2002-12-17 08:55) [0]

Иногда мне нужно просто подавить вывод сообщения об ошибке. Например при сохранении эксельного файла на месте существующего, если я не отключаю алерты экселя и потом отказываюсь от сохранения, появляется правильное, но ненужное мне сообщение об ошибке. Я давлю его путым блоком except. То есть


var
MySheet: Variant; // переменная для позднего связывания.
begin
....
try
MySheet.SaveAs("c:\myfile.xls");
except
end;
...
end;


Правильно ли это? И если нет, то как надо?


 
Юрий Зотов   (2002-12-17 09:06) [1]

Это нормально. С точки зрения стиля, конечно, лучше обходиться без подобных решений, но иногда приходится.


 
Anatoly Podgoretsky   (2002-12-17 09:22) [2]

В дополнение к выше сказанному, не стоит давить все ошибки, проанализируй не нужные подави, а нужные снова возбуди или выдай свое сообщение. А в таком виде только если в исключительных случаях




 
Andrey007   (2002-12-17 10:51) [3]

Кстати, я тут лазил по исходникам Delphi компонент (D5) и в каком-то модуле видел как раз такую конструкцию

try
какие-то операторы
except
;
end;


 
Andrey007   (2002-12-17 11:00) [4]

В модуле CorbaObj.pas

destructor TCorbaStub.Destroy;
begin
try
FStub := nil;
except
// Ignore exceptions when disconnecting
end;
inherited Destroy;
end;

В модуле CorbaCon

procedure TCorbaConnection.GetProviderNames(Proc: TGetStrProc);
var
List: Variant;
I: Integer;
begin
Connected := True;
VarClear(List);
try
List := (IUnknown(AppServer) as IAppServer).AS_GetProviderNames;
except
{ Assume any errors means the list is not available. }
end;
if VarIsArray(List) and (VarArrayDimCount(List) = 1) then
for I := VarArrayLowBound(List, 1) to VarArrayHighBound(List, 1) do
Proc(List[I]);
end;

В модуле System

procedure NotifyModuleUnload(HInstance: LongWord);
var
P: PModuleUnloadRec;
begin
P := ModuleUnloadList;
while P <> nil do
begin
try
P.Proc(HInstance);
except
// Make sure it doesn"t stop notifications
end;
P := P.Next;
end;
end;

В модуле ADODB

function TADOConnection.GetDefaultDatabase: WideString;
begin
if Connected then
try
Result := ConnectionObject.DefaultDatabase
except
{ Ignore errors reading this property }
end
else
Result := FDefaultDatabase;
end;

и т.д. и т.п.

Так что ничего страшного в использовании этого приёма я не вижу.


 
Anatoly Podgoretsky   (2002-12-17 11:10) [5]

Ты обратил внимание, что они все документировал почемы так поступили и случаи в которых это использовано, обоснованны


 
Andrey007   (2002-12-17 11:17) [6]

Насчёт документирования - ты имеешь в виду комментарии в тексте? Насчёт обоснованности - не знаю. А как, по-твоему, отличать обоснованное использование этого приёма от необоснованного?

С уважением.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
14-86090
ev
2002-12-04 18:54
2002.12.26
16-битная Delphi


1-85896
brat
2002-12-16 23:34
2002.12.26
Помогите перейти к базису ИЛИ-НЕ


1-86034
Vityok
2002-12-15 18:24
2002.12.26
Bios


4-86220
KUZIA
2002-11-12 13:10
2002.12.26
Как написать скринсавер


7-86193
Zombik666
2002-10-23 15:01
2002.12.26
BASIC to ASM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский