[fpc-pascal] Re: Fpc Access Violation if AppConfigDir doesn't exist.
Michael Van Canneyt
michael at freepascal.org
Wed Feb 13 14:14:12 CET 2013
On Wed, 13 Feb 2013, Giuliano Colla wrote:
> Sven Barth ha scritto:
>> On 13.02.2013 10:11, Lukasz Sokol wrote:
>>> On 13/02/2013 07:34, Michael Müller wrote:
>>>
>>>> I'm not sure if somebody else mentioned this already but I have the
>>>> feeling that Giuliano thinks that he has to decide to use try-finally OR
>>>> try-except but there are situations where you need both. One of the
>>>> criteria is if the object is local or global since for a global object it
>>>> is likely that you place the .Free (or for a global object better
>>>> FreeAndNil()) into a destructor or finalization section (which means that
>>>> you have to stop the program in case of an error and not continue showing
>>>> just a dialog) so you'll need only the try-except if you want to catch
>>>> the exception. In case of a local object you'll ALWAYS have the lines
>>>>
>>>> Obj := Class.Create;
>>>> try
>>>> // do some code
>>>> finally
>>>> Obj.Free;
>>>> end;
>>>>
>>>> otherwise you'll end up with memory leaks.
>>>> If you want to catch the exception in this situation you'll put
>>>> try-except extra around try-finally so you'll end up with
>>>>
>>>> Obj := Class.Create;
>>>> try
>>>> try
>>>> // do some code
>>>> finally
>>>> Obj.Free;
>>>> end;
>>>> except
>>>> writeln('We have a problem);
>>>> halt the program or reraise the exception or raise a new one
>>>> end;
>>>>
>>>> Regards
>>>>
>>> To developers:
>>> How would a generalized/packed construct like
>>>
>>> try
>>> [code block]
>>> finally
>>> [code block]
>>> except
>>> [code block]
>>> end;
>>
>> or what about
>>
>> try
>> [code block]
>> except
>> [code block]
>> finally
>> [code block]
>> end;
>>
>
> Python provides the following:
> try
> [code block]
> except
> [code block]
> else
> [code block]
> finally
> [code block]
> end;
>
> which can be used in any reasonable combination: just try..except, just
> try..finally just try..except..else etc.
>
> The except..else is a very useful construct, because it provides a path to a
> code block to execute only if there were no previous errors.
> This wouldn't break any existing applications, just add very useful features.
>
> What fpc developers think about that?
"Else" is used in Except already to select between various classes:
try
..
except
on E : MyType do
begin
end
else
// exception is not MyType
end;
so that is a problem.
I see no problem in adding finally, if you define carefully when it is executed.
Michael.
More information about the fpc-pascal
mailing list