[Python-Dev] [Python-checkins] r45850 - in python/trunk:Doc/lib/libfuncs.tex Lib/test/test_subprocess.py Misc/NEWSObjects/fileobject.c Python/bltinmodule.c

Tim Peters tim.peters at gmail.com
Tue May 2 09:47:42 CEST 2006


>>> SF #1479181: split open() and file() from being aliases for each other.

>> Umm ... why?

[/F]
> so that introspection tools can support GvR's pronouncement that "open"
> should be used to open files, and "file" should be used as a type representing
> standard (current stdio-based) file handles.

Maybe some of the intended changes are missing?  The post-patch
docstrings don't draw this distinction, and I'm lost about what else
introspection tools could be looking at to make the distinction
(special-casing the names?  but they could have done that before):

"""
>>> print open.__doc__
open(name[, mode[, buffering]]) -> file object

Open a file using the file() type, returns a file object.

>>> print file.__doc__
file(name[, mode[, buffering]]) -> file object

Open a file.  The mode can be 'r', 'w' or 'a' for reading (default),
writing or appending.  The file will be created if it doesn't exist
when opened for writing or appending; it will be truncated when
opened for writing.  Add a 'b' to the mode for binary files.
Add a '+' to the mode to allow simultaneous reading and writing.
If the buffering argument is given, 0 means unbuffered, 1 means line
buffered, and larger numbers specify the buffer size.
Add a 'U' to mode to open the file for input with universal newline
support.  Any line ending in the input file will be seen as a '\n'
in Python.  Also, a file so opened gains the attribute 'newlines';
the value for this attribute is one of None (no newline read yet),
'\r', '\n', '\r\n' or a tuple containing all the newline types seen.

'U' cannot be combined with 'w' or '+' mode.

>>>
"""

In Python 2.4, the docstrings were of course the same (the current
trunk's file.__doc__ except for a line at the end).  Since all useful
info about how to open a file has been purged from open()'s docstring,
if you've got the intent right, looks like the implementation got it
backwards ;-)

OK, maybe this is what you have in mind:

>>> type(open)
<type 'builtin_function_or_method'>
>>> type(file)
<type 'type'>

Fine, if that's all there really is to this, but I think it's a net
loss if open()'s docstring regression stands -- someone should finish
this job, or it should be reverted.


More information about the Python-Dev mailing list