ThomasWaldmann / argparse

python argparse, pypi version (moved from google code)
Other
59 stars 18 forks source link

Parsing multiple merged short options eats characters #73

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
parser = ArgumentParser(prefix_chars="-+")
parser.add_argument("-a",action="store_true")
parser.add_argument("+b",action="store_true")
parser.add_argument("+c",action="store_true")
print parser.parse_args("-abc".split())

What is the expected output? What do you see instead?
I would expect Namespace(a=True, b=True, c=True)
You get Namespace(a=True, b=False, c=True)

because in the loop that iterates through the prefix characters it builds
an option_string to try by pulling the first character off explicit_arg. If
it doesn't match any option then it will try the next prefix character, but
it will have lost that character from the explicit_arg. This is also a
problem even with only one prefix character because if it doesn't match an
option the error message will be missing that one character.

The above match -a, tried -b and fails, but instead of trying +b, it tries
+c because the b has been lost.

I've included multiple_short.patch which fixes just this bug. However, I
also don't agree with the behavior of trying all prefix characters. I would
expect that when merging short options together they would have to all
share the same prefix character. If I have prefix_chars="-+" and I have
options -a, +a, -b, and +b and I type +ab I would expect my action to be
called with option_strings +a and +b, not +a and -b. The patch to fix the
above bug *and* only try the same prefix character as the first option is
multiple_short_same_prefix.patch

Original issue reported on code.google.com by spar...@gmail.com on 5 Jun 2010 at 12:08

Attachments:

GoogleCodeExporter commented 9 years ago
Moved to http://bugs.python.org/issue9352

Original comment by steven.b...@gmail.com on 23 Jul 2010 at 2:18