This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2010年07月23日 14:18 by bethard, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| multiple_short_same_prefix.patch | bethard, 2010年07月23日 14:18 | |||
| test_multiple_short_same_prefix.patch | catherine, 2010年08月03日 15:54 | unit test | ||
| multiple_short_same_prefix_new.patch | catherine, 2010年08月03日 15:56 | patch | ||
| Messages (4) | |||
|---|---|---|---|
| msg111328 - (view) | Author: Steven Bethard (bethard) * (Python committer) | Date: 2010年07月23日 14:18 | |
[Moved from http://code.google.com/p/argparse/issues/detail?id=73] 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. [Only the latter patch (which sounds like the right behavior) is attached. It will need to be updated to work against Python trunk.] |
|||
| msg112621 - (view) | Author: Catherine Devlin (catherine) | Date: 2010年08月03日 15:54 | |
Attaching a test to verify parse failure on mismatched prefix (-abc or +abc). Steven's patch makes it pass. |
|||
| msg112622 - (view) | Author: Catherine Devlin (catherine) | Date: 2010年08月03日 15:56 | |
Updated Steven's patch; no changes, but now it knows the new context so that ``patch -p0`` won't fail. |
|||
| msg120135 - (view) | Author: Steven Bethard (bethard) * (Python committer) | Date: 2010年11月01日 16:00 | |
Patches applied in r86090 (3.X) and r86091 (2.7). Thanks for your help Catherine, and sorry it took me so long to apply these. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:04 | admin | set | github: 53598 |
| 2010年11月01日 16:01:00 | bethard | set | status: open -> closed assignee: bethard resolution: fixed messages: + msg120135 |
| 2010年08月03日 15:56:20 | catherine | set | files:
+ multiple_short_same_prefix_new.patch messages: + msg112622 |
| 2010年08月03日 15:54:57 | catherine | set | files:
+ test_multiple_short_same_prefix.patch versions: - Python 2.7, Python 3.2 nosy: + catherine messages: + msg112621 |
| 2010年07月23日 14:18:22 | bethard | create | |