clavedeluna · GitHub

Bug report

Bug description:

Given this example script

import argparse
class CsvListAction(argparse.Action):
    """
    argparse Action to convert "a,b,c" into ["a", "b", "c"]
    """
    def __call__(self, parser, namespace, values, option_string=None):
        # Conversion to dict removes duplicates while preserving order
        items = list(dict.fromkeys(values.split(",")).keys())
        setattr(namespace, self.dest, items)
parser = argparse.ArgumentParser(description="Testing")
parser.add_argument("directory", type=str, help="path to find files")
parser.add_argument(
    "--output",
    type=str,
    help="name of output file to produce",
)
name_args_group = parser.add_mutually_exclusive_group()
name_args_group.add_argument(
    "--name-exclude",
    action=CsvListAction,
    help="Comma-separated set of name ID(s) to exclude",
)
name_args_group.add_argument(
    "--name-include",
    action=CsvListAction,
    help="Comma-separated set of name ID(s) to include",
)
parser.add_argument(
    "--path-exclude",
    action=CsvListAction,
    default=[],
    help="Comma-separated set of UNIX glob patterns to exclude",
)
parser.add_argument(
    "--path-include",
    action=CsvListAction,
    default=[],
    help="Comma-separated set of UNIX glob patterns to include",
)
parser.parse_args()

Notice the cli args are name-exclude and name-include

Run the following command, which incorrectly puts the arg as --name
python argparse_mini.py /some/path --output here.txt --name something --path-exclude *request.py

If you run it with Python 3.12.2 or below, the resulting log statement is what we expect
argparse_mini.py: error: ambiguous option: --name could match --name-exclude, --name-include

However, tested with 3.12.7 and the log statement instead is
argparse_mini.py: error: ambiguous option: *request.py could match --name-exclude, --name-include

which is clearly incorrect, as *request.py was the argument to a different CLI option

CPython versions tested on:

3.11, 3.12

Operating systems tested on:

macOS

Linked PRs

Read the original on github.com ↗