[Python-Dev] cpython: Rename contextlib.ignored() to contextlib.ignore().

Victor Stinner victor.stinner at gmail.com
Wed Oct 16 17:10:21 CEST 2013


I would rewrite your examples using try/finally:

    try:
        try:
            os.unlink('missing.txt')
        finally:
            some
            other
            code
    except OSError as exc:
        do_something()

It's differently than yours, because it catchs OSError on "some; other; code".

Sometimes, I write it differently by copying the cleanup code:

    try:
        os.unlink('missing.txt')
        cleanup()
    except OSError as exc:
        cleanup()
        do_something()

(Yeah, it's ugly to duplicate code.)

Victor

2013/10/15 R. David Murray <rdmurray at bitdance.com>:
> You wouldn't use trap/as for that.  Instead you use it to replace this:
>
>     exc = None
>     try:
>         os.unlink('missing.txt')
>     except OSError as exc:
>         pass
>     some
>     other
>     code
>     if exc is not None:
>         do_something()
>
> with:
>
>     with trap(OSError) as cm:
>         os.unlink('missing.txt')
>     some
>     other
>     code
>     if cm.exc is not None:
>         do_something()
>
> which saves you *three* lines, not just two :)
>
> Of course in real life, in order for 'some other code' really be the
> best way to organize this snippet, you're going to be doing something
> more complicated than catching OSError from an unlink call.
>
> If this is accepted, I do *not* expect to see this in real code very
> often at all.  The main motivation for it is to make the semantics
> of the context manager clearer, and as a bonus make it work like
> assertRaises, which is our existing stdlib context manager that traps
> exceptions.
>
> I'd be happy with 'trap' or 'catch' without 'as' support, but the
> names make more sense if the exception is actually available after
> it is trapped/caught.
>
> --David
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/victor.stinner%40gmail.com


More information about the Python-Dev mailing list