Repository navigation
Path takes and ignores **kwargs #74033
Copy link
Copy link
Closed
Labels
3.10 (EOL)end of lifeend of life3.7 (EOL)end of lifeend of life3.8 (EOL)end of lifeend of life3.9 (EOL)end of lifeend of lifestdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-pathlibtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee = None
closed_at = None
created_at = <Date 2017-03-18.15:22:47.434>
labels = ['type-bug', '3.8', '3.9', '3.10', '3.7', 'library']
title = 'Path takes and ignores **kwargs'
updated_at = <Date 2020-06-10.22:05:47.572>
user = 'https://github.com/JelleZijlstra'bugs.python.org fields:
activity = <Date 2020-06-10.22:05:47.572>
actor = 'remi.lapeyre'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Library (Lib)']
creation = <Date 2017-03-18.15:22:47.434>
creator = 'JelleZijlstra'
dependencies = []
files = []
hgrepos = []
issue_num = 29847
keywords = ['patch']
message_count = 9.0
messages = ['289817', '289896', '289897', '289902', '289944', '289945', '289946', '289998', '369520']
nosy_count = 8.0
nosy_names = ['brett.cannon', 'pitrou', 'serhiy.storchaka', 'jstasiak', 'JelleZijlstra', 'Jim Fasarakis-Hilliard', 'remi.lapeyre', 'uriyyo']
pr_nums = ['13399', '19632']
priority = 'normal'
resolution = None
stage = 'patch review'
status = 'open'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue29847'
versions = ['Python 3.7', 'Python 3.8', 'Python 3.9', 'Python 3.10']Linked PRs
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
3.10 (EOL)end of lifeend of life3.7 (EOL)end of lifeend of life3.8 (EOL)end of lifeend of life3.9 (EOL)end of lifeend of lifestdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-pathlibtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Activity
JelleZijlstra commentedon Mar 18, 2017
pathlib.Path.__new__ takes **kwargs, but doesn't do anything with them (https://github.com/python/cpython/blob/master/Lib/pathlib.py#L979). This doesn't appear to be documented.
This feature should presumably be either documented or removed (probably removed unless I'm missing some reason for having it).
Brief discussion on a typeshed PR at python/typeshed#991 (diff)
brettcannon commentedon Mar 20, 2017
Yep, kwargs should be dropped since it isn't used or documented: https://docs.python.org/3/library/pathlib.html#pathlib.PurePath (probably just a hold-over from when it did in some earlier version of the code).
JelleZijlstra commentedon Mar 20, 2017
Thanks, I'll add a PR. This doesn't need to be documented, right?
serhiy-storchaka commentedon Mar 20, 2017
The support of **kwargs in Path.__new__ is needed if you want to implement a subclass of Path with __init__ accepting keyword arguments (and since Path constructor takes variable number of positional arguments, new arguments should be keyword-only).
Removing **kwargs from Path.__new__ will break the above example.
brettcannon commentedon Mar 21, 2017
Shoot, that's too bad. I guess we should document it then so people are aware that keyword arguments are ignored, else we will break subclasses. There's also an unfortunate difference between PurePath and Path as PurePath doesn't have this quirk.
serhiy-storchaka commentedon Mar 21, 2017
I don't know whether it was the intension of Antoine or just an oversight. I don't know whether it is used in the wild. But we can at least raise a TypeError for concrete classes PosixPath and WindowsPath if ignoring keyword arguments is a problem. Many extension types don't take keyword arguments, but their subclasses accept and ignore keyword arguments. For example:
pitrou commentedon Mar 21, 2017
I don't remember exactly, but I think this was the intention indeed. There was originally an openat-using subclass, and IIRC it took additional parameters (such as the directory fd). That got scrapped quite early in the process, so we can remove the **kwargs thing now.
brettcannon commentedon Mar 22, 2017
Then I vote for Serhiy's idea of simply raising an exception in the concrete subclasses when a keyword argument is given.
remilapeyre commentedon May 21, 2020
PurePath subclasses cannot support kwargs as __new__() does not accept **kwargs:
The behaviour for this should probably be made the same for both Path and PurePath.
jaraco commentedon Oct 10, 2022
As reported in the dupe bug, this bug led to masking a user mistake.
barneygale commentedon Jan 5, 2023
#100481 would fix this without breaking subclassing by adding an
__init__()method.gh-74033: Fix bug when Path takes and ignores **kwargs (GH-19632)
brettcannon commentedon Jan 14, 2023
I took #19632 as a fix, but it can obviously be tweaked as long as the deprecation warning sticks around.
pythonGH-74033: Drop deprecated `pathlib.Path()` keyword arguments
Merge branch 'main' into pythongh-74033-remove
Merge branch 'main' into pythongh-74033-remove
Merge branch 'main' into pythongh-74033-remove
GH-74033: Drop deprecated `pathlib.Path` keyword arguments (#118793)
pythonGH-74033: Drop deprecated `pathlib.Path` keyword arguments (pyt…