How to pop the interpreter's stack?
Ethan Furman
ethan at stoneleaf.us
Sun Dec 26 12:15:32 EST 2010
Steven D'Aprano wrote:
> Right. But I have thought of a clever trick to get the result KJ was
> asking for, with the minimum of boilerplate code. Instead of this:
>
>
> def _pre_spam(args):
> if condition(args):
> raise SomeException("message")
> if another_condition(args):
> raise AnotherException("message")
> if third_condition(args):
> raise ThirdException("message")
>
> def spam(args):
> _pre_spam(args)
> do_useful_work()
>
>
> you can return the exceptions instead of raising them (exceptions are
> just objects, like everything else!), and then add one small piece of
> boilerplate to the spam() function:
>
>
> def _pre_spam(args):
> if condition(args):
> return SomeException("message")
> if another_condition(args):
> return AnotherException("message")
> if third_condition(args):
> return ThirdException("message")
>
> def spam(args):
> exc = _pre_spam(args)
> if exc: raise exc
> do_useful_work()
-1
You failed to mention that cleverness is not a prime requisite of the
python programmer -- in fact, it's usually frowned upon. The big
problem with the above code is you are back to passing errors in-band,
pretty much completely defeating the point of have an out-of-band channel.
~Ethan~
More information about the Python-list
mailing list