You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
open(): remove 'U' mode, deprecated since Python 3.3 #81511
Issue bpo-15204: Deprecated the 'U' mode in file-like objects.
$ cat x.py
f = open(__file__, 'U')
line = f.readline()
print(type(line))
f.close()
$ python3.7 x.py
x.py:1: DeprecationWarning: 'U' mode is deprecated
f = open(__file__, 'U')
<class 'str'>
The 'U' mode is documented as deprecated since Python 3.3
The flag is basically only there for backward compatibility with Python 2. Python 3.9.0 final release is currently scheduled at 2020-06-08: 6 months after Python 2 end-of-life (2020-01-01).
Currently, the 'U' mode is documented as it will be removed from Python 4.0. But I dislike having a bunch of backward incompatible changes in Python 4.0. I would prefer Python 4.0 to be simply the version after Python 3.X.
I prefer to push backward incompatible changes at the beginning of a dev cycle (Python 3.9), so we have room to revert it later if it causes too much trouble.
I reported the issue to docutils. In fact, docutils FileInput class was already fixed to prevent the deprecation warning, but there was no release yet: https://sourceforge.net/p/docutils/bugs/363/
While we are of course able to patch new versions of Samba, this will make it harder to bisect back though Samba history. It would be really great if this kind of change could be reverted or at least deferred so Samba can rely on a stable language platform for it's build system.
it is useful to build old versions, sometimes 7 year old versions, to confirm if/when the behaviour regressed.
I think the sticking point is this: it is not expected that old versions should work as-is with the newest Python. Can you do your build and test with the Python version that was current 7 years ago?
Activity
vstinner commentedon Jun 18, 2019
The builtin open() function accepts 'U' in the file mode, but it emits a DeprecationWarning since Python 3.4, change made in bpo-15204:
commit 6787a38
Author: Serhiy Storchaka <storchaka@gmail.com>
Date: Sat Nov 23 22:12:06 2013 +0200
The 'U' mode is documented as deprecated since Python 3.3
The flag is basically only there for backward compatibility with Python 2. Python 3.9.0 final release is currently scheduled at 2020-06-08: 6 months after Python 2 end-of-life (2020-01-01).
Currently, the 'U' mode is documented as it will be removed from Python 4.0. But I dislike having a bunch of backward incompatible changes in Python 4.0. I would prefer Python 4.0 to be simply the version after Python 3.X.
Deprecation warnings are now displayed in the __main__ module by default, thanks to the PEP-565 -- Show DeprecationWarning in __main__.
https://www.python.org/dev/peps/pep-0565/
More and more projects run their test suite using -Werror and so have to fix deprecation warnings.
vstinner commentedon Jun 18, 2019
I prefer to push backward incompatible changes at the beginning of a dev cycle (Python 3.9), so we have room to revert it later if it causes too much trouble.
vstinner commentedon Jun 21, 2019
I reported the issue to docutils. In fact, docutils FileInput class was already fixed to prevent the deprecation warning, but there was no release yet:
https://sourceforge.net/p/docutils/bugs/363/
vstinner commentedon Jul 16, 2019
docutils is already fixed in the development version. I requested a release:
https://sourceforge.net/p/docutils/bugs/364/
vstinner commentedon Oct 27, 2019
I cited this change in the PEP-608 "Coordinated Python release".
vstinner commentedon Oct 28, 2019
New changeset e471e72 by Victor Stinner in branch 'master':
bpo-37330: open() no longer accept 'U' in file mode (GH-16959)
e471e72
vstinner commentedon Oct 28, 2019
Thanks for the review Serhiy ;-)
asottile commentedon Oct 28, 2019
should we backport a documentation change for this? (the deprecatedremoved says 4.0 currently)
vstinner commentedon Oct 29, 2019
New changeset 1d2862a by Victor Stinner in branch '3.8':
bpo-37330: open(): "U" mode is removed in Python 3.9 (GH-16972)
1d2862a
miss-islington commentedon Oct 29, 2019
New changeset 4cb08b6 by Miss Skeleton (bot) in branch '3.7':
bpo-37330: open(): "U" mode is removed in Python 3.9 (GH-16972)
4cb08b6
vstinner commentedon Oct 29, 2019
Done. Thanks for the reminder.
abartlet commentedon Feb 20, 2020
This breaks Samba's build:
https://bugzilla.samba.org/show_bug.cgi?id=14266
While we are of course able to patch new versions of Samba, this will make it harder to bisect back though Samba history. It would be really great if this kind of change could be reverted or at least deferred so Samba can rely on a stable language platform for it's build system.
6 remaining items
vstinner commentedon Mar 4, 2020
New changeset 942f7a2 by Victor Stinner in branch 'master':
bpo-39674: Revert "bpo-37330: open() no longer accept 'U' in file mode (GH-16959)" (GH-18767)
942f7a2
vstinner commentedon Sep 1, 2021
I reopen the issue. I created PR 28118 to try again to remove the "U" mode in Python 3.11.
vstinner commentedon Sep 2, 2021
Samba has been updated in the meanwhile, buildtools/wafsamba/samba_utils.py:
+ function_code = node.read('r', None)
https://github.com/samba-team/samba/blob/1209c89dcf6371bbfa4f3929a47a573ef2916c1a/buildtools/wafsamba/samba_utils.py#L692
vstinner commentedon Sep 2, 2021
At 2019-07-22, Günter Milde wrote: "Docutils 0.15 is released" (with the fix). The latest docutils version is 0.17.1.
ambv commentedon Sep 2, 2021
New changeset 19ba212 by Victor Stinner in branch 'main':
bpo-37330: open() no longer accept 'U' in file mode (GH-28118)
19ba212
vstinner commentedon Sep 2, 2021
Let's see how it goes. In the worst case, we have time before Python 3.11 final to revert it one more time.
merwok commentedon Jan 5, 2022
I think the sticking point is this: it is not expected that old versions should work as-is with the newest Python. Can you do your build and test with the Python version that was current 7 years ago?
Fix python file open mode