Closed
Description
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