open() and EOFError

Chris Angelico rosuav at gmail.com
Mon Jul 7 10:09:28 CEST 2014


On Mon, Jul 7, 2014 at 6:00 PM, Steven D'Aprano <steve at pearwood.info> wrote:
> How do people feel about code like this?
>
> try:
>     name = input("Enter file name, or Ctrl-D to exit")
>     # On Windows, use Ctrl-Z [enter] instead.
>     fp = open(name)
> except EOFError:
>     sys.exit()
> except IOError:
>     handle_bad_file(name)
> else:
>     handle_good_file(fp)

It seems trivial in this example to break it into two try blocks:

try:
    name = input("Enter file name, or Ctrl-D to exit")
    # On Windows, use Ctrl-Z [enter] instead.
except EOFError:
    sys.exit()
try:
    fp = open(name)
except IOError:
    handle_bad_file(name)
else:
    handle_good_file(fp)

But if the code's more complicated and it's not so easy to split, then
sure, doesn't seem a problem. It's like spam[foo//bar] and then
catching either IndexError or ZeroDivisionError - there's no big
confusion from having two distinct sources of two distinct errors
handled by two distinct except blocks.

ChrisA



More information about the Python-list mailing list