[Python-Dev] TypeError: f() missing 1 required positional argument: 'x'

Steven D'Aprano steve at pearwood.info
Thu Sep 20 20:49:46 CEST 2012

On 20/09/12 22:59, Mark Dickinson wrote:
> On Thu, Sep 20, 2012 at 1:21 PM, Nick Coghlan<ncoghlan at gmail.com>  wrote:
>> +1 for using the unqualified "argument" in these error messages to
>> mean "positional or keyword argument" (inspect.Parameter spells it out
>> as POSITIONAL_OR_KEYWORD, but the full phrase is far too verbose for
>> an error message).
> Ah yes;  I see that 'positional or keyword' is a more accurate term
> (but agree it's unwieldy for an error message).  I also see that I was
> naive to think that the 'fix' is as simple as dropping the word
> 'positional':
>      >>>  def f(a, *, b):
>      ...     pass
>      ...
>      >>>  f()
>      Traceback (most recent call last):
>        File "<stdin>", line 1, in<module>
>      TypeError: f() missing 1 required positional argument: 'a'
> If the word 'positional' were dropped here, it would give the
> incorrect impression that f only requires one argument.

I don't expect error messages to give a complete catalog of every
problem with a specific function call. If f() reports that required
argument 'a' is missing, that does not imply that no other required
arguments are also missing. I think it is perfectly acceptable to
not report the missing 'b' until the missing 'a' is resolved.

But I do expect error messages to be accurate. +1 to remove the
word "positional" from the message.


More information about the Python-Dev mailing list