On May 28, 12:48 pm, "Dan Upton" <[EMAIL PROTECTED]> wrote:
> there's no reason "set" itself
> should throw any sort of error in the sense of an exception--in a
> statement like "Set x to SomeFunctionThatCanBlowUp()", the semantics
> should clearly be that the error comes from the function.  In a simple
> addition statement, that makes no sense.

For example:

  Set z to catch(somefunctionthatmightblowup(...)).
  If catch(set x to y+z.) < 0.1 then go to tinyanswer.

Or something like that.  Or if you change the + to a / and z is 0.0,
for example, then it could cause a divide-by-zero exception.  There is
no guarantee that the + won't cause an exception, given that there is
no guarantee that y and z are both numeric.

> However, I think overloading your catch error types to include objects
> (or integral values, I guess, your example below isn't clear) along
> with real values (ignoring the bit above about whether floating-point
> assignment could throw an error) makes things confusing.

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".

> It's nice
> that "catch(stuff)" indicates that there's one or more statements
> inside, but so does indentation in Python, bracketing in C/C++,
> Begin/End in <insert language here>, and so forth, ...

Except that in those languages, I don't think that the indentation,
bracketing, Begin/End, etc, can be used in expressions.  Catch can.
For example, catch will return the final value of z:

If catch(Set x to y+z. Set y to x+z.  Set z to 1/(x+y).) < 0.1 then go
to tinyanswer.

> Beyond that,
> I think you would want a good mechanism for comparing ranges of values
> if you want to make exceptions/errors real-valued.

I am thinking that exceptions/errors should have any kinds of values
the programmer wants to give them.  Some people prefer error numbers,
some prefer error messages, some prefer error identifiers, etc.  I am
thinking that the Error function should simply take a list of whatever
objects the user wants to throw, and throw them.  For example, if the
programmer wanted an error number and an error message for a
particular error:

  If x < 10 then throw error(10, "Please enter a number >= 10").

They could then do something like:

  Set result to catch(funtionthatcouldblowup(...)).
  If result is an error then if result(1) = 10 then writeline
result(2).

Thank you for your comments, they are helping me to clarify my own
thinking on error handling in general and on catch in particular.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to