<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">In one of my own packages, I use the following to catch dynamic error messages:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">    def handle_error(exc):</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">        # do stuff with exc</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">    with catch('error_code', handle_error):</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">        # do stuff that can raise an error</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">The definition of "catch" is as follows, assuming the root exception actually raised is called "CodedError" whose "code" attribute is the error code:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">    from contextlib import contextmanager</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">    @contextmanager</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">    def catch(code=None, caught=None, always=None):</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">        try:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">            yield</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">        except CodedError as exc:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">            if isinstance(code, str):</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">                is_caught = exc.code == code</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">            else:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">                is_caught = exc.code in code #assume it's a container</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">            if (code is not None) and not is_caught:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">                raise</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">            if caught is not None:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">                caught(exc)</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">        finally:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">            if always is not None:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">                always()</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">Perhaps you could make use of this?</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">Suggesting,</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small;color:#0000ff">Ken Hilton;<br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><font color="#0000ff" face="monospace, monospace"></font><br></div></div></div></div></div></div></div></div></div></div>