On 12/08/2015 10:33, Peter Otten wrote:
Cecil Westerhof wrote:

I have:
========================================================================
accepted_params     = {
     'pcpu',
     'rss',
     'size',
     'time',
     'vsize',
}
========================================================================

Later I use:
========================================================================
if (to_check != 'all') and not(to_check in accepted_params):
     raise Exception('Used illegal parameter: {0}.\n'
                     'Accepted ones: {1}'
                     .format(to_check, sorted(accepted_params)))
========================================================================

When using 'all' I want to do the work for all accepted parameters.
;-)

Doesn't that make it an "accepted parameter"? Why not add it to the set?

Is this a correct way to do this, or is there a better way?

I suppose you do this early in a function? Then at least choose a more
specific exception (e. g. ValueError).

If this is about commandline arguments -- argparse can handle such
restrictions:

$ cat demo.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--check", choices=["pcpu", "rss"], default="all")
print(parser.parse_args().check)
$ python3 demo.py
all
$ python3 demo.py --check rss
rss
$ python3 demo.py --check ssr
usage: demo.py [-h] [--check {pcpu,rss}]
demo.py: error: argument --check: invalid choice: 'ssr' (choose from 'pcpu',
'rss')



The wonderful http://docopt.org/ makes this type of thing a piece of cake. I believe there's a newer library that's equivalent in functionality to docopt but I can never remember the name of it, anybody?

--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to