STINNER Victor added the comment: > This changes the behavior if pass a file object to the parser. When the > parser failed it was possible to use the passed file object (for example call > tell()). Now it is closed.
If the high-level *function* parse() is called with a filename, the caller doesn't have access to the file object nor the parser. If you use directly the parser class and pass an open file object, in that case, yes, my change closes the file. If you want to keep the old behaviour for that case, we can change the code to only close the source if source is not a string (not isinstance(source, str)) in the ExpatParser.parse() method. Since the caller owns the file object, (s)he is responsible to close it. Note: on parser success, the source is always closed, even if the user pass an already open file object. I'm not convince that using the file object on parser error and using directly the ExpatParser class is a common use case. I expect that the XML parser reads more data than it needs (read ahead for speed), so I don't think that file.tell() will you exactly the file position where the XML parser failed. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue30264> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com