New submission from Antoine Pietri: The fact that tempfile.TemporaryFile() has a "name" integer attribute causes weird behavior when interacting with libraries that rely on this attribute being a valid string for file objects. For instance, it led to this exception with the "tarfile" module, which I resolved by using a NamedTemporaryFile():
>>> tarfile.open(fileobj=tempfile.TemporaryFile(), mode='w') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.4/tarfile.py", line 1585, in open return cls.taropen(name, mode, fileobj, **kwargs) File "/usr/lib/python3.4/tarfile.py", line 1595, in taropen return cls(name, mode, fileobj, **kwargs) File "/usr/lib/python3.4/tarfile.py", line 1431, in __init__ self.name = os.path.abspath(name) if name else None File "/usr/lib/python3.4/posixpath.py", line 360, in abspath if not isabs(path): File "/usr/lib/python3.4/posixpath.py", line 64, in isabs return s.startswith(sep) AttributeError: 'int' object has no attribute 'startswith' Which is caused by these lines in the "tarfile" module: if name is None and hasattr(fileobj, "name"): name = fileobj.name If TemporaryFile() didn't have a name attribute, tarfile, which doesn't really need the file name, would simply have continued without errors. I am not aware of any place where this "name" integer attribute is actually useful, and, as a matter of fact, it is not even documented: http://docs.python.org/3.4/library/tempfile.html#tempfile.TemporaryFile ---------- components: Library (Lib) messages: 214662 nosy: seirl priority: normal severity: normal status: open title: tempfile.TemporaryFile() shouldn't have a name attribute type: behavior versions: Python 3.3, Python 3.4 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue21044> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com