What c.l.py's opinions about Soft Exception?

Diez B. Roggisch deets at nospam.web.de
Mon Mar 10 18:18:02 EDT 2008


metawilm at gmail.com schrieb:
> On Mar 9, 2:21 pm, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
>> Is this soft-exception implemented anywhere, so that one can see what
>> experiences and best practices have evolved around using it?
> 
> Lie's idea is to separate exceptions in two groups, those that must be
> handled and those that don't. A better way is to have two different
> ways to raise exceptions: one exceptional situation can be "Hard" in
> some situations and "Soft" in others, and it is up to the way of
> raising to make the choice, while the exception stays the same.
> 
> Common Lisp has two ways of raising: functions "error" and "signal".
> Python's "raise" is like CL's "error": you end up in the debugger if
> the exception is not handled. Exceptions that are raised by CL's
> "signal" don't have to be caught: if there is no matching "except"
> clause the raise statement becomes a "pass".
> 
> Or as Wikipedia states nicely: "Conditions are a generalization of
> exceptions. When a condition arises, an appropriate condition handler
> is searched for and selected, in stack order, to handle the condition.
> Conditions which do not represent errors may safely go unhandled
> entirely; their only purpose may be to propagate hints or warnings
> toward the user."

How would that differ from something like this:


with add_soft_handler(SoftException):
    invoke_something()

... # deep down in code

raise_soft(SoftException())


The implementation of add_soft_handler and raise_soft is trivial - a bit 
of thread-local storage and a stack.

I don't say that such mechanism isn't handy occasionally - I just don't 
see the need for specialized syntactical and/or interpreter-support.

Diez



More information about the Python-list mailing list