> Text mode is the default, you have to specify the 'b' if you want binary > mode. And open() seems to accept any mode quite happily: > > >>> f=open('build.xml', 'rt') > >>> f > <open file 'build.xml', mode 'rt' at 0x0096C9B0> > >>> f.close() > >>> f=open('build.xml', 'rabcd') > >>> f > <open file 'build.xml', mode 'rabcd' at 0x0096C9F8> > > Kent
I'll bet you'll find that open() is coded something like the following def open(filename,mode="r"): if mode = 'w': dosomething() if mode = 'wb': dosomething() if mode = 'w+': dosomething() if mode = 'rb': dosomething() ... else: dosomething() # Where this assumes you are using default mode "r" This flow control with emphasis on the else means that if the mode doesn't match anything other than "r", then return file object mode "r" Let's see, now that I'm checking whether that's true, it doesn't quite match up. A file that's opened with "r" will check to see whether the file exists or not, whereas a file opened with nonsense does not. Ahh. That's because you can write to a file opened with nonsense. So instead the function (if it were written in python and not C) would probably look like this instead. def open(filename, mode="r") if mode = "r": dosomethingread() if mode = "rb": dosomethingreadbin() if mode = "w+": dosomethingwriteupd() ... else: dosomethingwrite() # Where write is in the else clause, but read is the default value for mode Phew. This seems strange. Why don't they put write in the control flow above with a raise statement in the else clause? HTH, Jacob _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor