[Tutor] argparse iterable

kendy at kendy.org kendy at kendy.org
Tue Apr 2 02:31:10 CEST 2013


Dear Tutor

I want to compare command line options, to options in a dictionary from a YAML
file. The command line will over-ride the options in my file. (The YAML file, and
its dictionary are not shown. That part works.)

My distilled code:

-------------------------------------------------------------------------
$ cat h.py
#!/usr/bin/python

import argparse
parser = argparse.ArgumentParser(description='Short sample app')

def GetArgs(parser):
    parser.add_argument('-a', action="store_true", default=False)
    parser.add_argument('-b', action="store", dest="b")
    parser.add_argument('-c', action="store", dest="c", type=int)
    return parser

GetArgs(parser)

print(parser.parse_args())
print("But this doesn't iter through a b and c:")
for k,v in parser.parse_args():
    print('This arg is %s %s' % k, k[str(v)])
$ 
-------------------------------------------------------------------------

My error:
$ h.py -a -b hi -c 42
Namespace(a=True, b='hi', c=42)
But this doesn't iter through a b and c:
Traceback (most recent call last):
  File "./h.py", line 16, in <module>
    for k,v in parser.parse_args():
TypeError: 'Namespace' object is not iterable
$ 

How can I get parser to be iterable?

After I get it to iter, I suppose that I'll be bitten by the boolean and integer
type conversions. I'm not sure how to handle that either. Will 'str()' save me?

Thanks a million (again!),
Ken



More information about the Tutor mailing list