https://github.com/python/cpython/commit/3c28510b984392b8dac87a17dfc5887366d5c4ab
commit: 3c28510b984392b8dac87a17dfc5887366d5c4ab
branch: main
author: Barney Gale <[email protected]>
committer: barneygale <[email protected]>
date: 2024-05-19T17:04:56+01:00
summary:
GH-119113: Raise `TypeError` from `pathlib.PurePath.with_suffix(None)` (#119124)
Restore behaviour from 3.12 when `path.with_suffix(None)` is called.
files:
A Misc/NEWS.d/next/Library/2024-05-17-17-32-12.gh-issue-119113.kEv1Ll.rst
M Lib/pathlib/_abc.py
M Lib/test/test_pathlib/test_pathlib_abc.py
diff --git a/Lib/pathlib/_abc.py b/Lib/pathlib/_abc.py
index 568a17df26fc33..3cdbb735096edb 100644
--- a/Lib/pathlib/_abc.py
+++ b/Lib/pathlib/_abc.py
@@ -205,15 +205,13 @@ def with_suffix(self, suffix):
string, remove the suffix from the path.
"""
stem = self.stem
- if not suffix:
- return self.with_name(stem)
- elif not stem:
+ if not stem:
# If the stem is empty, we can't make the suffix non-empty.
raise ValueError(f"{self!r} has an empty name")
- elif suffix.startswith('.') and len(suffix) > 1:
- return self.with_name(stem + suffix)
- else:
+ elif suffix and not (suffix.startswith('.') and len(suffix) > 1):
raise ValueError(f"Invalid suffix {suffix!r}")
+ else:
+ return self.with_name(stem + suffix)
def relative_to(self, other, *, walk_up=False):
"""Return the relative path to another path identified by the passed
diff --git a/Lib/test/test_pathlib/test_pathlib_abc.py
b/Lib/test/test_pathlib/test_pathlib_abc.py
index aadecbc142cca6..d9e51c0e3d6411 100644
--- a/Lib/test/test_pathlib/test_pathlib_abc.py
+++ b/Lib/test/test_pathlib/test_pathlib_abc.py
@@ -999,6 +999,7 @@ def test_with_suffix_windows(self):
self.assertRaises(ValueError, P('c:a/b').with_suffix, 'c\\d')
self.assertRaises(ValueError, P('c:a/b').with_suffix, '.c/d')
self.assertRaises(ValueError, P('c:a/b').with_suffix, '.c\\d')
+ self.assertRaises(TypeError, P('c:a/b').with_suffix, None)
def test_with_suffix_empty(self):
P = self.cls
@@ -1006,7 +1007,7 @@ def test_with_suffix_empty(self):
self.assertRaises(ValueError, P('').with_suffix, '.gz')
self.assertRaises(ValueError, P('/').with_suffix, '.gz')
- def test_with_suffix_seps(self):
+ def test_with_suffix_invalid(self):
P = self.cls
# Invalid suffix.
self.assertRaises(ValueError, P('a/b').with_suffix, 'gz')
@@ -1017,6 +1018,7 @@ def test_with_suffix_seps(self):
self.assertRaises(ValueError, P('a/b').with_suffix, '.c/.d')
self.assertRaises(ValueError, P('a/b').with_suffix, './.d')
self.assertRaises(ValueError, P('a/b').with_suffix, '.d/.')
+ self.assertRaises(TypeError, P('a/b').with_suffix, None)
def test_relative_to_common(self):
P = self.cls
diff --git
a/Misc/NEWS.d/next/Library/2024-05-17-17-32-12.gh-issue-119113.kEv1Ll.rst
b/Misc/NEWS.d/next/Library/2024-05-17-17-32-12.gh-issue-119113.kEv1Ll.rst
new file mode 100644
index 00000000000000..195be067138b2e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-05-17-17-32-12.gh-issue-119113.kEv1Ll.rst
@@ -0,0 +1,2 @@
+Fix issue where :meth:`pathlib.PurePath.with_suffix` didn't raise
+:exc:`TypeError` when given ``None`` as a suffix.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]