Argument count mismatch

Steven D'Aprano steve+comp.lang.python at pearwood.info
Thu Apr 21 21:43:39 EDT 2011


On Thu, 21 Apr 2011 12:33:09 -0700, RVince wrote:

> I am getting the following:
> 
> Error - <type 'exceptions.TypeError'>: cmseditorlinemethod() takes
> exactly 2 arguments (1 given)
> 
> When I make the following call:
> 
> http://localhost/eligibility/cmseditorlinemethod/474724434

That's not a call, that's a URL. It's also a link to localhost, which is 
*your* computer and not visible to us.

How about actually showing us the *actual call* you make? Cut and paste 
the line of code that calls cmseditorlinemethod, showing the arguments.

My *guess* is that you're calling it without providing any arguments:

instance.cmseditorlinemethod()

Python automatically injects the `self` argument, but it requires two: 
self and ssn:

> def cmseditorlinemethod(self, ssn):
[...]


An alternative explanation: you don't use `self` in the body of 
cmseditorlinemethod. Possibly cmseditorlinemethod is actually a stand-
alone function rather than a method, and you are calling it like this:

cmseditorlinemethod(ssn)

but you have mistakenly declared the function to take two arguments.

Really, the error message is quite explicit in your problem: you have one 
argument given, but two arguments are required. The only subtlety is that 
for method calls, the `self` argument is automatically provided rather 
than manually, but once you've learned that quirk of Python, what else do 
you need to know to solve this problem?

By the way, I know this is unsolicited advice, but I'm going to give it 
anyway. Look at your function:


def cmseditorlinemethod(self, ssn):
    c.details = Session.query(MSPResponse).filter(
                MSPResponse.beneficiaryssn == ssn).all()
    content = render('/cmseditorline.mako')
    return content


It looks to me like this function relies on no fewer than three global 
variables, two that you read from and one which you write to:

c
Session
MSPResponse

This is almost certainly poor design. Using global state is almost always 
harmful and should be avoided. 

(I don't include `render` in this, as using global functions is normally 
harmless.)

http://c2.com/cgi/wiki?GlobalVariablesAreBad



-- 
Steven



More information about the Python-list mailing list