Python: avoiding Pylint warnings about too many arguments Python: avoiding Pylint warnings about too many arguments python python

Python: avoiding Pylint warnings about too many arguments


First, one of Perlis's epigrams:

"If you have a procedure with 10 parameters, you probably missed some."

Some of the 10 arguments are presumably related. Group them into an object, and pass that instead.

Making an example up, because there's not enough information in the question to answer directly:

class PersonInfo(object):  def __init__(self, name, age, iq):    self.name = name    self.age = age    self.iq = iq

Then your 10 argument function:

def f(x1, x2, name, x3, iq, x4, age, x5, x6, x7):  ...

becomes:

def f(personinfo, x1, x2, x3, x4, x5, x6, x7):  ...

and the caller changes to:

personinfo = PersonInfo(name, age, iq)result = f(personinfo, x1, x2, x3, x4, x5, x6, x7)


Do you want a better way to pass the arguments or just a way to stop Pylint from giving you a hard time? If the latter, you can stop the nagging by putting Pylint-controlling comments in your code along the lines of:

#pylint: disable=R0913

or, better:

#pylint: disable=too-many-arguments

remembering to turn them back on as soon as practicable.

In my opinion, there's nothing inherently wrong with passing a lot of arguments and solutions advocating wrapping them all up in some container argument don't really solve any problems, other than stopping Pylint from nagging you :-).

If you need to pass twenty arguments, then pass them. It may be that this is required because your function is doing too muchand refactoring could assist there, and that's something you should look at. But it's not a decision we can really make unless we see what the 'real' code is.


You can easily change the maximum allowed number of arguments in Pylint. Just open your pylintrc file (generate it if you don't already have one) and change:

max-args = 5

to:

max-args = 6 # Or any value that suits you

From Pylint's manual

Specifying all the options suitablefor your setup and coding standardscan be tedious, so it is possible touse a rc file to specify the defaultvalues. Pylint looks for /etc/pylintrcand ~/.pylintrc. The --generate-rcfileoption will generate a commentedconfiguration file according to thecurrent configuration on standardoutput and exit. You can put otheroptions before this one to use them inthe configuration, or start with thedefault values and hand tune theconfiguration.