Python and Flaming Thunder
Duncan Booth
duncan.booth at invalid.invalid
Thu May 29 11:33:26 EDT 2008
"Dan Upton" <upton at virginia.edu> wrote:
> On Thu, May 29, 2008 at 3:36 AM, Duncan Booth
><duncan.booth at invalid.invalid> wrote:
>> Dave Parker <daveparker at flamingthunder.com> wrote:
>>
>>> Catch doesn't return just error types or numbers, it can return any
>>> object returned by the statements that are being caught; catch
>>> doesn't care what type they are. For example:
>>>
>>> Writeline catch(set x to "hello world".).
>>>
>>> will write "hello world".
>>
>> I really don't get this. Surely the point about an error being thrown
>> to a catch statement is that the error path is separate from the
>> normal execution path? What you are doing here is ensuring that
>> unexpected errors have no chance at all of propagating up to the top
>> level: they are invariably going to get caught by some other handler
>> that was installed just because someone was too lazy to write a set
>> statement followed by a writeline.
>
> It also looks like an overloading of catch, semantically similar to
> the C:
>
> int retcode;
> if( retcode = doSomethingThatReturns0or1() ) printf("Hello world");
>
> Again, I don't think you want to start overloading your
> exception-handling mechanism. If you want a set expression to be
> equal to the l-value at the end, that's fine, but there's no reason
> that catch should evaluate to an object or an integral- or real-valued
> exception in error cases, or of the last statement of the block if
> there's no error. (Evaluating a block to be equal to its last
> statement is okay, I guess; I know at least that there's a call in
> Scheme that lets you do a more imperative programming style in the
> functional language--whether that's a good thing is probably a holy
> war.) I just think if you're shooting for an easily understandable
> language, overloading error handling requires more thought on the
> programmer's part, not less, because they have to reason about all
> outcomes.
>
I like BCPL's way of handling block expressions: VALOF is followed by a
block of statements and within that block RESULTIS gives the result.
This lets you exit the block early (just like a return statement does),
but without returning from the current procedure (unless of course the
entire body of the procedure is a VALOF block). Naturally the result has
to be explicitly specified (otherwise the value is undefined).
Maybe FT should do something similar:
Writeline value of (set x to "hello world". Result is x.).
and catch can then stick to catching errors.
--
Duncan Booth http://kupuguy.blogspot.com
More information about the Python-list
mailing list