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.

classification
Title: error mixing positional and non-positional arguments with `argparse`
Type: behavior Stage: resolved
Components: Library (Lib) Versions:
process
Status: closed Resolution: out of date
Dependencies: Superseder:
Assigned To: Nosy List: r.david.murray, stefan
Priority: normal Keywords:

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:54adminsetgithub: 76217
2017-11-15 23:07:01r.david.murraysetstatus: open -> closed
resolution: out of date
messages: + msg306317

stage: resolved
2017-11-15 19:24:56stefansetmessages: + msg306302
2017-11-15 18:20:18stefansetmessages: + msg306294
2017-11-15 17:54:17r.david.murraysetnosy: + r.david.murray
messages: + msg306291
2017-11-15 16:36:45stefancreate