"Try:" which only encompasses head of compound statement

Scott David Daniels daniels at dsl-only.net
Tue Aug 28 06:14:59 CEST 2007

Ben Finney wrote:
> Jameson.Quinn at gmail.com writes:
> ... try to only catch exceptions from the
> minimum amount of code that does one discrete action.
>     try:
>         input_file = open(my_filename)
>     except IOError, exc:
>         print "Can't open myfile: %(exc)" % locals()
>     for line in input_file:
>         count += open_and_process_subfile(line)
Actually, this will be followed by some foolishness because
(1) print "Can't open myfile: %(exc)" % locals()
     Should at least be:
         print "Can't open myfile: %(exc)s" % locals()
     But more reasonably:
         print "Can't open myfile: %s" % exc
(2) Even if the print succeeds, the code will fall through into the loop 
and you'll (if you are lucky) get a complaint about
     NameError: name 'input_file' is not defined
You'd need to "raise" after the print, but the normal IOError failure
to open message already includes the name of the file it tried to get
to in an attribute "filename", so just catch it outside this code (as
others have already suggested).

-Scott David Daniels
Scott.Daniels at Acm.Org

More information about the Python-list mailing list