python / cpython

The Python programming language
https://www.python.org
Other
63.18k stars 30.25k forks source link

posixpath.commonpath: Check for empty iterables broken #114709

Closed srittau closed 8 months ago

srittau commented 8 months ago

Bug report

Bug description:

This came up in python/typeshed#11310: When passing an empty sequence to commonpath(), a ValueError is raised with an appropriate error message. When an "empty" iterable is passed, an IndexError is raised instead, although iterables otherwise work fine:

from posixpath import commonpath

commonpath([])  # -> ValueError: commonpath() arg is an empty sequence
commonpath(iter([]))  # -> IndexError: tuple index out of range

The fix is trivial, I'll send a PR. Technically this is an API change, though, although the old API is unexpected.

CPython versions tested on:

3.11, 3.12

Operating systems tested on:

Linux

Linked PRs

serhiy-storchaka commented 8 months ago

It did not supported arbitrary iterables initially, it only worked with sequences. Then in 3.6 it started working with non-empty iterables by accident, but it was not intentional change, it was an implementation detail.

Accepting an arbitrary iterable is a new feature. This change can only go in future 3.13.

serhiy-storchaka commented 8 months ago

Please revert the change in versionchanged:: 3.6 and add versionchanged:: 3.13.

hauntsaninja commented 8 months ago

Thanks, done in https://github.com/python/cpython/pull/115639