[Python-Dev] Reasons behind misleading TypeError message when passing the wrong number of arguments to a method

Michael Foord fuzzyman at voidspace.org.uk
Thu May 20 12:40:51 CEST 2010


On 20/05/2010 10:49, Giampaolo Rodolà wrote:
> 2010/5/20 John Arbash Meinel<john.arbash.meinel at gmail.com>:
>    
>> Giampaolo Rodolà wrote:
>>      
>>>>>> class A:
>>>>>>              
>>> ...     def echo(self, x):
>>> ...             return x
>>> ...
>>>        
>>>>>> a = A()
>>>>>> a.echo()
>>>>>>              
>>> Traceback (most recent call last):
>>>    File "<stdin>", line 1, in<module>
>>> TypeError: echo() takes exactly 2 arguments (1 given)
>>>
>>> I bet my last 2 cents this has already been raised in past but I want
>>> to give it a try and revamp the subject anyway.
>>> Is there a reason why the error shouldn't be adjusted to state that
>>> *1* argument is actually required instead of 2?
>>>
>>>        
>> Because you wouldn't want to have
>>
>> A.echo()
>>
>> Say that it takes 1 argument and (-1 given) ?
>>
>> John
>> =:->
>>
>>
>>      
> I see that as a different error type: what you're doing there is
> calling a method of a class which you haven't instantiated in the
> first place.
> Actually the error message returned in this other case is not very
> clear as well:
>
> "unbound method echo() must be called with A instance as first
> argument (got nothing instead)"
>
> It talks about "arguments" while no arguments are actually involved in
> the problem: just a class I forgot to initialize.
>    

Although the pattern of calling an unbound method with an instance as 
the first argument (self) is not uncommon - and if you're doing 
Class.method() that not only looks like what you're doing but is also an 
accurate error message.

I would also expect that accidentally calling unbound methods is a much 
less common error than calling bound methods with the wrong number of 
arguments...

All the best,

Michael Foord

>
> --- Giampaolo
> http://code.google.com/p/pyftpdlib
> http://code.google.com/p/psutil
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/fuzzyman%40voidspace.org.uk
>    


-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog

READ CAREFULLY. By accepting and reading this email you agree, on behalf of your employer, to release me from all obligations and waivers arising from any and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and acceptable use policies (”BOGUS AGREEMENTS”) that I have entered into with your employer, its partners, licensors, agents and assigns, in perpetuity, without prejudice to my ongoing rights and privileges. You further represent that you have the authority to release me from any BOGUS AGREEMENTS on behalf of your employer.




More information about the Python-Dev mailing list