Skip to content

Named tuple's _replace() method should raise TypeError for unexpected keyword arguments #110275

Closed
@serhiy-storchaka

Description

@serhiy-storchaka

Bug report

When you call a function with incorrect key arguments, you get a TypeError. But it is not always so with the _replace() method of a named tuple class created by collections.namedtuple().

>>> from collections import namedtuple
>>> P = namedtuple('P', 'x y')
>>> p = P(1, 2)
>>> p._replace(z=3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/serhiy/py/cpython/Lib/collections/__init__.py", line 460, in _replace
    raise ValueError(f'Got unexpected field names: {list(kwds)!r}')
ValueError: Got unexpected field names: ['z']

It is not even consistent with constructor which raises TypeError:

>>> P(x=1, y=2, z=3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: P.__new__() got an unexpected keyword argument 'z'

I think that _replace() also should raise TypeError for unexpected keyword arguments.

cc @rhettinger

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    stdlibPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions