classification
Title: argparse allow_abbrev option also controls short flag combinations
Type: behavior Stage: resolved
Components: Documentation, Library (Lib) Versions: Python 3.7, Python 3.6
process
Status: closed Resolution: duplicate
Dependencies: Superseder: argparse: allow_abbrev=False stops -vv from working
View: 26967
Assigned To: docs@python Nosy List: berker.peksag, docs@python, joern
Priority: normal Keywords: patch

Created on 2017-11-14 17:29 by joern, last changed 2017-11-16 08:01 by berker.peksag. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 4396 open joern, 2017-11-14 18:04
Messages (2)
msg306229 - (view) Author: Jörn Hees (joern) * Date: 2017-11-14 17:29
The allow_abbrev option (default True) currently is documented like this (https://docs.python.org/3/library/argparse.html#allow-abbrev):
> Normally, when you pass an argument list to the parse_args() method of an ArgumentParser, it recognizes abbreviations of long options.

However, it also controls combinations of short options and especially the combination of flags (store_const) like `-a -b` as `-ab`.

Example snippet for testing:

import argparse
import sys

parser = argparse.ArgumentParser(
    allow_abbrev=False
)
parser.add_argument('-a', action='store_true')
parser.add_argument('-b', action='store_true')
parser.add_argument('x', nargs='*')
parser.parse_args('-a -b foo bar'.split())
parser.parse_args('-ab foo bar'.split())


As you can see the 2nd parse will fail if allow_abbrev=False.

This issue is either a doc issue only or an unintended combination of long option shortening and (the way more common) flag combinations. When i deactivated this in my code, i wanted to disable the (nice to have) long option shortening, but i unintentionally also deactivated (MUST have) short flag combinations.
msg306343 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2017-11-16 08:01
Thank you for the report and for the PR. I think this is a duplicate of issue 26967.

> This issue is either a doc issue only or an unintended combination of
> long option shortening and (the way more common) flag combinations.

This is indeed a bug so it would be better to fix it.
History
Date User Action Args
2017-11-16 08:01:13berker.peksagsetstatus: open -> closed

superseder: argparse: allow_abbrev=False stops -vv from working
nosy: + berker.peksag
versions: - Python 3.5, Python 3.8
messages: + msg306343

type: behavior
resolution: duplicate
stage: patch review -> resolved
2017-11-14 18:04:46joernsetkeywords: + patch
stage: patch review
pull_requests: + pull_request4344
2017-11-14 17:29:42joerncreate