[Tutor] Program review

Kent Johnson kent37 at tds.net
Mon Jan 7 23:54:02 CET 2008


Ricardo Aráoz wrote:
> Kent Johnson wrote:
>> from contextlib import nested
>>      with nested(open_file(self.direcciones), open_file(self.excluidas)) 
>> as (fIncl, fExcl):
>>
> 
> Nice! How would you add exception reporting to this?

I don't have a good answer to that, that's why I didn't propose it 
originally. You could use

try:
   with nested(open_file(self.direcciones), open_file(self.excluidas))
as (fIncl, fExcl):
     try:
       do_something_with(fIncl, fExcl)
     except:
       # handle exceptions from do_something_with()
except:
   pass # We already logged exceptions from the open_file calls

You could omit the inner try/except if you are sure that 
do_something_with() won't raise an exception, but it's pretty hard to be 
sure of that unless it wraps its contents already.

Looking at PEP 343, it's pretty clear ;-) that exceptions raised by 
open_file() will just be passed out of the with statement. Look at the 
pseudo-code in the section "Specification: The 'with' Statement". The 
exception is raised in the very first line - mgr = (EXPR) - when 
open_file() is called.

Kent


More information about the Tutor mailing list