Closed
Description
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
Metadata
Metadata
Assignees
Labels
Projects
Status
Doc issues