re-entering in the normal flow after an exception is raised
bokr at oz.net
Wed Sep 29 02:15:33 CEST 2004
On 28 Sep 2004 09:17:07 -0700, michele.simionato at gmail.com (Michele Simionato) wrote:
>I think I want "re-entrant exceptions" (not sure if this is the
As Alex said, resumable is the usual word, I think.
>Consider the following example:
> raise NotSeriousException()
>Since the exception is raised at the do_this() level, do_that() will
>not be executed. However, since the exception is not that serious, I
>would like to catch it and continue from the point the exception was
>raised, i.e. something like that:
> continue # does not work of course
>where "continue" would continue from do_that().
>Is there some elegant or hackish way to get this?
Hacks will probably bite you later, though I think they're fine
for one-time throwaway code that you really throw away.
I wonder if you could interfere with exception unwinding via sys.settrace.
I believe you can get control at each frame as the exception propagates,
but I don't know what can be done. I think you would take a big performance hit though.
>Notice that I do NOT want to modify the source code of
>It comes from real life code and I could modify it, but if there was
>smarter way of getting what I want I would be interested ...
Maybe think about smart ways to modify?
It comes to mind that you might have functions call a complain function
instead of directly raising exceptions, if you want to customize or parameterize
by seriousness or other criteria. E.g., (untested)
def complain(kind, exc, *args):
if kind in globalconfigdict: raise exc(*args)
complain('not so serious', NotSeriousException, 'args', 'for', 'exception')
Just an idea. You could also make complain a callable object with various methods for
configuring behaviour easily etc. etc. Just .02USD off the top of my head ;-)
More information about the Python-list