mirror of
https://github.com/python/cpython.git
synced 2025-11-02 11:08:57 +00:00
GH-119113: Raise TypeError from pathlib.PurePath.with_suffix(None) (#119124)
Restore behaviour from 3.12 when `path.with_suffix(None)` is called.
This commit is contained in:
parent
4b76671728
commit
3c28510b98
3 changed files with 9 additions and 7 deletions
|
|
@ -205,15 +205,13 @@ class PurePathBase:
|
||||||
string, remove the suffix from the path.
|
string, remove the suffix from the path.
|
||||||
"""
|
"""
|
||||||
stem = self.stem
|
stem = self.stem
|
||||||
if not suffix:
|
if not stem:
|
||||||
return self.with_name(stem)
|
|
||||||
elif not stem:
|
|
||||||
# If the stem is empty, we can't make the suffix non-empty.
|
# If the stem is empty, we can't make the suffix non-empty.
|
||||||
raise ValueError(f"{self!r} has an empty name")
|
raise ValueError(f"{self!r} has an empty name")
|
||||||
elif suffix.startswith('.') and len(suffix) > 1:
|
elif suffix and not (suffix.startswith('.') and len(suffix) > 1):
|
||||||
return self.with_name(stem + suffix)
|
|
||||||
else:
|
|
||||||
raise ValueError(f"Invalid suffix {suffix!r}")
|
raise ValueError(f"Invalid suffix {suffix!r}")
|
||||||
|
else:
|
||||||
|
return self.with_name(stem + suffix)
|
||||||
|
|
||||||
def relative_to(self, other, *, walk_up=False):
|
def relative_to(self, other, *, walk_up=False):
|
||||||
"""Return the relative path to another path identified by the passed
|
"""Return the relative path to another path identified by the passed
|
||||||
|
|
|
||||||
|
|
@ -999,6 +999,7 @@ class DummyPurePathTest(unittest.TestCase):
|
||||||
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(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):
|
def test_with_suffix_empty(self):
|
||||||
P = self.cls
|
P = self.cls
|
||||||
|
|
@ -1006,7 +1007,7 @@ class DummyPurePathTest(unittest.TestCase):
|
||||||
self.assertRaises(ValueError, P('').with_suffix, '.gz')
|
self.assertRaises(ValueError, P('').with_suffix, '.gz')
|
||||||
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
|
P = self.cls
|
||||||
# Invalid suffix.
|
# Invalid suffix.
|
||||||
self.assertRaises(ValueError, P('a/b').with_suffix, 'gz')
|
self.assertRaises(ValueError, P('a/b').with_suffix, 'gz')
|
||||||
|
|
@ -1017,6 +1018,7 @@ class DummyPurePathTest(unittest.TestCase):
|
||||||
self.assertRaises(ValueError, P('a/b').with_suffix, '.c/.d')
|
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(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):
|
def test_relative_to_common(self):
|
||||||
P = self.cls
|
P = self.cls
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix issue where :meth:`pathlib.PurePath.with_suffix` didn't raise
|
||||||
|
:exc:`TypeError` when given ``None`` as a suffix.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue