I might agree with idea of contextlib.ignore() (I'm still opposed to
the idea), but I don't understand the purpose of adding a new syntax
doing exactly the same than try/except:

>     with trap(OSError) as cm:
>         os.unlink('missing.txt')
>     if cm.exc:
>         do_something()

Nobody noticed that this can be written:

try:
  os.unlink('missing.txt')
except OSError as err:
  # do something with err

?? What happened with the Zen Principle "There should be one-- and
preferably only one --obvious way to do it." I don't understand why I
would import contextlib and use a new context manager, whereas
try/except is already a builtin feature of Python.

By the way, what are the performances of contextlib.ignore()?
Exceptions can be slow in some cases. Adding something even slower
would not be a good idea.

Victor


2013/10/15 Tim Delaney <timothy.c.dela...@gmail.com>:
> On 16 October 2013 05:17, Alexander Belopolsky
> <alexander.belopol...@gmail.com> wrote:
>>
>> On Tue, Oct 15, 2013 at 12:45 PM, Ethan Furman <et...@stoneleaf.us> wrote:
>> >     with trap(OSError) as cm:
>> >         os.unlink('missing.txt')
>> >     if cm.exc:
>> >         do_something()
>>
>> .. and why is this better than
>>
>> try:
>>    os.unlink('missing.txt')
>> except OSError as exc:
>>    do_something()
>
>
> It would allow you to perform a series of operations then process the any
> exceptions all together e.g.
>
> with trap(OSError) as cm1:
>     os.unlink('missing.txt')
>
> with trap(OSError) as cm2:
>     os.unlink('other_missing.txt')
>
> with trap(OSError) as cm3:
>     os.unlink('another_missing.txt')
>
> for cm in (cm1, cm2, cm3):
>     if cm.exc:
>         do_something(cm.exc)
>
> An equivalent implementation would be:
>
> exceptions = []
>
> try:
>     os.unlink('missing.txt')
> except OSError as exc:
>     exceptions.append(exc)
>
> try:
>     os.unlink('missing.txt')
> except OSError as exc:
>     exceptions.append(exc)
>
> try:
>     os.unlink('missing.txt')
> except OSError as exc:
>     exceptions.append(exc)
>
> for exc in exceptions:
>     if exc:
>         do_something(exc)
>
> Tim Delaney
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev@python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> https://mail.python.org/mailman/options/python-dev/victor.stinner%40gmail.com
>
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to