]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-114709: Fix exceptions raised by posixpath.commonpath (#114710)
authorSebastian Rittau <srittau@rittau.biz>
Sun, 18 Feb 2024 08:24:58 +0000 (09:24 +0100)
committerGitHub <noreply@github.com>
Sun, 18 Feb 2024 08:24:58 +0000 (00:24 -0800)
Fix the exceptions raised by posixpath.commonpath

Raise ValueError, not IndexError when passed an empty iterable. Raise
TypeError, not ValueError when passed None.

Doc/library/os.path.rst
Lib/posixpath.py
Lib/test/test_posixpath.py
Misc/NEWS.d/next/Library/2024-01-29-13-46-41.gh-issue-114709.SQ998l.rst [new file with mode: 0644]

index 34bc76b231de92144e93970704bae7f0479e68f4..16e654fcdb408db4f7e0193e416dba7a86b4b9e9 100644 (file)
@@ -79,7 +79,7 @@ the :mod:`glob` module.)
 
 .. function:: commonpath(paths)
 
-   Return the longest common sub-path of each pathname in the sequence
+   Return the longest common sub-path of each pathname in the iterable
    *paths*.  Raise :exc:`ValueError` if *paths* contain both absolute
    and relative pathnames, the *paths* are on the different drives or
    if *paths* is empty.  Unlike :func:`commonprefix`, this returns a
@@ -90,7 +90,7 @@ the :mod:`glob` module.)
    .. versionadded:: 3.5
 
    .. versionchanged:: 3.6
-      Accepts a sequence of :term:`path-like objects <path-like object>`.
+      Accepts an iterable of :term:`path-like objects <path-like object>`.
 
 
 .. function:: commonprefix(list)
index e4f155e41a32216c45c051feb5e64f9f17716158..33943b4403636a8346174a633bc0af9fda0bc9d8 100644 (file)
@@ -546,10 +546,11 @@ def relpath(path, start=None):
 def commonpath(paths):
     """Given a sequence of path names, returns the longest common sub-path."""
 
+    paths = tuple(map(os.fspath, paths))
+
     if not paths:
         raise ValueError('commonpath() arg is an empty sequence')
 
-    paths = tuple(map(os.fspath, paths))
     if isinstance(paths[0], bytes):
         sep = b'/'
         curdir = b'.'
index 86ce1b1d41ba61ac2916672df879d58abffc9c45..cbb7c4c52d969793ea46ebcca10798d1244f8b36 100644 (file)
@@ -703,7 +703,9 @@ class PosixPathTest(unittest.TestCase):
             self.assertRaises(exc, posixpath.commonpath,
                               [os.fsencode(p) for p in paths])
 
+        self.assertRaises(TypeError, posixpath.commonpath, None)
         self.assertRaises(ValueError, posixpath.commonpath, [])
+        self.assertRaises(ValueError, posixpath.commonpath, iter([]))
         check_error(ValueError, ['/usr', 'usr'])
         check_error(ValueError, ['usr', '/usr'])
 
diff --git a/Misc/NEWS.d/next/Library/2024-01-29-13-46-41.gh-issue-114709.SQ998l.rst b/Misc/NEWS.d/next/Library/2024-01-29-13-46-41.gh-issue-114709.SQ998l.rst
new file mode 100644 (file)
index 0000000..ca0d790
--- /dev/null
@@ -0,0 +1,5 @@
+:func:`posixpath.commonpath()` now raises a :exc:`ValueError` exception when
+passed an empty iterable. Previously, :exc:`IndexError` was raised.
+
+:func:`posixpath.commonpath()` now raises a :exc:`TypeError` exception when
+passed ``None``. Previously, :exc:`ValueError` was raised.