Issue 32036: error mixing positional and non-positional arguments with argparse (original) (raw)

Created on 2017-11-15 16:36 by stefan, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
test_argparse.py stefan,2017-11-15 16:36 script demonstrating inconsistent command-line parsing behaviour
Messages (5)
msg306283 - (view) Author: Stefan Seefeld (stefan) * (Python committer) Date: 2017-11-15 16:36
I'm trying to mix positional and non-positional arguments with a script using `argparse`, but I observe inconsistent behaviour. The attached test runs fine when invoked with test_argparse.py --info a a=b test_argparse.py a a=b --info but produces the error `error: unrecognized arguments: a=b` when invoked as test_argparse.py a --info a=b Is this intended behaviour ? If yes, is this documented ? If not, is there a way to make this work with existing `argparse` versions ?
msg306291 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2017-11-15 17:54
Can you reproduce this without your PosArgsParser?
msg306294 - (view) Author: Stefan Seefeld (stefan) * (Python committer) Date: 2017-11-15 18:20
On 15.11.2017 12:54, R. David Murray wrote: > Can you reproduce this without your PosArgsParser? I can indeed (by simply commenting out the `action` argument to the `add_argument()` calls). That obviously results in all positional arguments being accumulated in the `goal` member, as there is no logic to distinguish `a` from `a=b` semantically.
msg306302 - (view) Author: Stefan Seefeld (stefan) * (Python committer) Date: 2017-11-15 19:24
It looks like https://bugs.python.org/issue14191 is a conversation about the same inconsistent behaviour. It is set to "fixed". Can you comment on this ? Should I follow the advice mentioned there about how to work around the issue ?
msg306317 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2017-11-15 23:07
Ah, yes, I'd managed to forget about that issue, even though I was the one that finally committed the fix. So, the alternate parser will be in 3.7. In the meantime you can grab the code from the commit and put it in a local file, I think. You'll doubtless have to tweak a few things to use it that way, but it should be fairly straightforward.
History
Date User Action Args
2022-04-11 14:58:54 admin set github: 76217
2017-11-15 23:07:01 r.david.murray set status: open -> closedresolution: out of datemessages: + stage: resolved
2017-11-15 19:24:56 stefan set messages: +
2017-11-15 18:20:18 stefan set messages: +
2017-11-15 17:54:17 r.david.murray set nosy: + r.david.murraymessages: +
2017-11-15 16:36:45 stefan create