I see no problem in fixing this in 3.0 and 2.6.1. The current behavior
is a bug and I see no reason to expect that users would depend on it.
Sure, it might occasionally mask a bug elsewhere in their code -- but
given how esoteric this whole issue is I think its fine to consider
this simply a bug and fix it.

2008/11/2 Christian Heimes <[EMAIL PROTECTED]>:
> Martin v. Löwis wrote:
>>
>> However, this is the documented behavior:
>>
>> "the underlying file descriptor will be kept open when the file is closed."
>>
>> and, for close
>>
>> "Flush and close this stream."
>>
>> It would help if the documentation of close would read
>>
>> "Flush and close this stream. This method has no effect if the file is
>> already closed, or if closefd was False when the file object was created."
>
> I would use a slightly different wording
>
> "Flush and close this stream. This method has no effect if the file is
> already closed. Once the file is closed, any operation on the file (e.g. 
> reading or writing) will fail. Close doesn't close the internal file 
> descriptor  if closefd was False when the file object was created."
>
> In my opinion close() should render the file *object* disabled in all cases. 
> closefd should just leave the file *descriptor* open, not the file *object*.
>
>> It might be useful if closefd attribute could be reflected, so that
>> applications that know about it and really want to close the file
>> still can do that.
>
> Agreed! My latest patch adds a read only attribute closefd.
>
>> Also, is it really the case that close has no effect if closefd
>> was given? ISTM that it will still flush the file, for a
>> _BufferedIOMixin. This should systematically be clarified: it
>> should either always flush, or never (although "always flush"
>> seems more useful).
>
> I haven't looked at the code in the io yet. Our discussion was mostly about 
> the _fileio C extension. To clarify the issue with an example
>
>>>> out = open(1, "w", closefd=False)
>>>> out.write("example\n")
> example
> 8
>>>> out.close()
> /usr/local/lib/python3.0/io.py:1461: RuntimeWarning: Trying to close 
> unclosable fd!
>  self.buffer.close()
>>>> out.write("example\n")
> example
> 8
>
> I think the second out.write() call should raise an exception instead of 
> writing the string to the fd 1.
>
>> Also, why does the _BufferedIOMixin discard exceptions from flush?
>> Errors should never pass silently.
>
> Ack!
>
>> Also, why does the FileIO.close first invoke _FileIO.close, then
>> RawIOBase.close? IIUC, FileIO.close will close the file handle,
>> yet RawIOBase will attempt to flush afterwards.
>
> Apparently the io module hasn't been reviewed for its massive usage of close. 
> :/
>
> Christian
> _______________________________________________
> Python-3000 mailing list
> Python-3000@python.org
> http://mail.python.org/mailman/listinfo/python-3000
> Unsubscribe: 
> http://mail.python.org/mailman/options/python-3000/guido%40python.org
>



-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to