Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #74100

Re: open() and EOFError

From Roy Smith <roy@panix.com>
Newsgroups comp.lang.python
Subject Re: open() and EOFError
Date 2014-07-07 08:39 -0400
Organization PANIX Public Access Internet and UNIX, NYC
Message-ID <roy-BE5640.08390407072014@news.panix.com> (permalink)
References <53ba11fc$0$29985$c3e8da3$5496439d@news.astraweb.com> <c1uo2eF60gfU1@mid.individual.net> <53ba538d$0$2926$c3e8da3$76491128@news.astraweb.com>

Show all headers | View raw


In article <53ba538d$0$2926$c3e8da3$76491128@news.astraweb.com>,
 Steven D'Aprano <steve@pearwood.info> wrote:

> On Mon, 07 Jul 2014 17:04:12 +1200, Gregory Ewing wrote:
> 
> > Steven D'Aprano wrote:
> >> Are there any circumstances where merely *opening* a file (before
> >> reading it) can raise EOFError?
> > 
> > I don't think so. As far as I know, the only built-in thing that raises
> > EOFError is input() (and raw_input() in Py2).
> 
> Thanks. That's what I thought.
> 
> 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)

I really dislike putting more than one statement inside a try block.  
Breaking this up into two try statements, one catching the EOF, the 
other catching the IOError, is better.  More verbose, to be sure, but 
the flow of control is a lot more obvious.

On a different topic, I've always disliked embedding instructions to 
"type Ctrl-D".  The problem is, how to generate an EOF (or interrupt, or 
whatever) is configurable in the tty driver (see below).  In theory, the 
user could have remapped EOF to be something else.  Maybe they're a 
die-hard Windows fan, and insist on being able to type Ctrl-Z for EOF.  
Not to mention that things like readline are probably running the 
terminal in raw mode and remapping everything all over again.

On the other hand, telling the user to "generate EOF", while technically 
more correct, is not very useful for most people.  I suppose you could 
interrogate the tty driver to find out what the current EOF character 
is, and stick that in your prompt.  I don't even know if that's possible 
with the standard Python library, and I doubt it would be very portable.    
I'm not sure what the best solution is here.

------------------------------------------------------
$ stty -e
speed 9600 baud; 24 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
   -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
   -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
   -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
   -dtrflow -mdmbuf
discard dsusp   eof     eol     eol2    erase   intr    kill    lnext   
^O      ^Y      ^D      <undef> <undef> ^?      ^C      ^U      ^V      
min     quit    reprint start   status  stop    susp    time    werase  
1       ^\      ^R      ^Q      ^T      ^S      ^Z      0       ^W      
------------------------------------------------------

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

open() and EOFError Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-07-07 03:20 +0000
  Re: open() and EOFError Gregory Ewing <greg.ewing@canterbury.ac.nz> - 2014-07-07 17:04 +1200
    Re: open() and EOFError Steven D'Aprano <steve@pearwood.info> - 2014-07-07 08:00 +0000
      Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-07 18:09 +1000
      Re: open() and EOFError Dave Angel <davea@davea.name> - 2014-07-07 08:14 -0400
      Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-07 22:19 +1000
        Re: open() and EOFError Roy Smith <roy@panix.com> - 2014-07-07 08:46 -0400
          Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-07 22:58 +1000
            Re: open() and EOFError Roy Smith <roy@panix.com> - 2014-07-07 20:26 -0400
          Re: open() and EOFError Gregory Ewing <greg.ewing@canterbury.ac.nz> - 2014-07-08 09:50 +1200
        Re: open() and EOFError Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-07-07 15:45 +0000
          Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-08 01:53 +1000
          Re: open() and EOFError Marko Rauhamaa <marko@pacujo.net> - 2014-07-07 19:08 +0300
            Re: open() and EOFError Marko Rauhamaa <marko@pacujo.net> - 2014-07-07 19:12 +0300
      Re: open() and EOFError Roy Smith <roy@panix.com> - 2014-07-07 08:39 -0400
        Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-07 22:55 +1000
          Re: open() and EOFError Roy Smith <roy@panix.com> - 2014-07-07 20:28 -0400
        Re: open() and EOFError Terry Reedy <tjreedy@udel.edu> - 2014-07-07 14:49 -0400
          Re: open() and EOFError Gregory Ewing <greg.ewing@canterbury.ac.nz> - 2014-07-08 10:04 +1200
            Re: open() and EOFError Grant Edwards <invalid@invalid.invalid> - 2014-07-08 14:19 +0000
              Re: open() and EOFError Terry Reedy <tjreedy@udel.edu> - 2014-07-08 11:08 -0400
              Re: open() and EOFError Tim Chase <python.list@tim.thechases.com> - 2014-07-08 10:20 -0500
              Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-09 01:24 +1000
              Re: open() and EOFError Tim Chase <python.list@tim.thechases.com> - 2014-07-08 10:46 -0500
                Re: open() and EOFError Roy Smith <roy@panix.com> - 2014-07-08 21:05 -0400
                Re: open() and EOFError Anssi Saari <as@sci.fi> - 2014-07-10 22:40 +0300
              Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-09 01:49 +1000
              Re: ^D vs ^Z as EOF and DOS dinosaurs talking (was: open() and EOFError) Tim Chase <python.list@tim.thechases.com> - 2014-07-08 10:57 -0500
                Re: ^D vs ^Z as EOF and DOS dinosaurs talking (was: open() and EOFError) Jan van den Broek <balglaas@xs4all.nl> - 2014-07-08 16:38 +0000
              Re: ^D vs ^Z as EOF and DOS dinosaurs talking (was: open() and EOFError) Chris Angelico <rosuav@gmail.com> - 2014-07-09 02:20 +1000
              Re: open() and EOFError Tim Chase <python.list@tim.thechases.com> - 2014-07-08 11:40 -0500
              Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-09 02:50 +1000
          Re: open() and EOFError Steven D'Aprano <steve@pearwood.info> - 2014-07-08 09:03 +0000
            Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-08 20:29 +1000
      Re: open() and EOFError Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-07-07 14:06 +0100
      Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-07 23:27 +1000
      Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-07 23:29 +1000
      Re: open() and EOFError Dan Stromberg <drsalists@gmail.com> - 2014-07-07 09:07 -0700
      Re: open() and EOFError Ian Kelly <ian.g.kelly@gmail.com> - 2014-07-07 11:25 -0600
        Re: open() and EOFError Marko Rauhamaa <marko@pacujo.net> - 2014-07-07 20:31 +0300
          Re: open() and EOFError Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-07-07 18:07 +0000
            Re: open() and EOFError Marko Rauhamaa <marko@pacujo.net> - 2014-07-07 21:42 +0300
            Re: open() and EOFError Roy Smith <roy@panix.com> - 2014-07-07 20:22 -0400
          Re: open() and EOFError Gregory Ewing <greg.ewing@canterbury.ac.nz> - 2014-07-08 10:09 +1200
            Re: open() and EOFError Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-07-08 00:10 +0100
            Re: open() and EOFError "Neil D. Cerutti" <neilc@norwich.edu> - 2014-07-08 10:29 -0400
      Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-08 03:29 +1000
        Re: open() and EOFError Marko Rauhamaa <marko@pacujo.net> - 2014-07-07 20:40 +0300
          Re: open() and EOFError Chris Angelico <rosuav@gmail.com> - 2014-07-08 10:55 +1000
      Re: open() and EOFError Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2014-07-07 18:54 -0400

csiph-web