Package: libpython3.9-minimal
Version: 3.9.2-1
Severity: normal
File: /usr/lib/python3.9/argparse.py

This works:

    #!/usr/bin/python3
    import argparse
    parser = argparse.ArgumentParser(description='Demonstrate a dumbness in 
python 3.9')
    parser.add_mutually_exclusive_group().add_argument('--fred')
    parser.parse_args(['--help'])

This errors:

    #!/usr/bin/python3
    import argparse
    parser = argparse.ArgumentParser(description='Demonstrate a dumbness in 
python 3.9')
    parser.add_mutually_exclusive_group()
    parser.parse_args(['--help'])

This is the error:

    Traceback (most recent call last):
      File "<stdin>", line 5, in <module>
      File "/usr/lib/python3.9/argparse.py", line 1830, in parse_args
        args, argv = self.parse_known_args(args, namespace)
      File "/usr/lib/python3.9/argparse.py", line 1863, in parse_known_args
        namespace, args = self._parse_known_args(args, namespace)
      File "/usr/lib/python3.9/argparse.py", line 2072, in _parse_known_args
        start_index = consume_optional(start_index)
      File "/usr/lib/python3.9/argparse.py", line 2012, in consume_optional
        take_action(action, args, option_string)
      File "/usr/lib/python3.9/argparse.py", line 1940, in take_action
        action(self, namespace, argument_values, option_string)
      File "/usr/lib/python3.9/argparse.py", line 1104, in __call__
        parser.print_help()
      File "/usr/lib/python3.9/argparse.py", line 2560, in print_help
        self._print_message(self.format_help(), file)
      File "/usr/lib/python3.9/argparse.py", line 2544, in format_help
        return formatter.format_help()
      File "/usr/lib/python3.9/argparse.py", line 295, in format_help
        help = self._root_section.format_help()
      File "/usr/lib/python3.9/argparse.py", line 226, in format_help
        item_help = join([func(*args) for func, args in self.items])
      File "/usr/lib/python3.9/argparse.py", line 226, in <listcomp>
        item_help = join([func(*args) for func, args in self.items])
      File "/usr/lib/python3.9/argparse.py", line 333, in _format_usage
        action_usage = format(optionals + positionals, groups)
      File "/usr/lib/python3.9/argparse.py", line 408, in _format_actions_usage
        start = actions.index(group._group_actions[0])
    IndexError: list index out of range


The problem only affects --help; an empty mutex group (without
required=True) still works in regular (non --help) usage.

I think the default --help provider should just skip empty mutex groups.

I think this (UNTESTED!) patch is probably sufficient:

    diff -ud --label /tmp/argparse.py --label \#\<buffer\ argparse.py\> 
/tmp/argparse.py /tmp/buffer-content-7I3lfM
    --- /tmp/argparse.py
    +++ #<buffer argparse.py>
    @@ -404,6 +404,8 @@
             group_actions = set()
             inserts = {}
             for group in groups:
    +            if len(group._group_actions) == 0:
    +                continue
                 try:
                     start = actions.index(group._group_actions[0])
                 except ValueError:

    Diff finished.  Sat Jan 15 22:28:23 2022

I guess this is an upstream issue, but
I haven't time today to compare Debian's python to upstream's python.
Sorry about that.



-- System Information:
Debian Release: 11.2
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable-security'), (500, 
'proposed-updates'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 5.14.0-0.bpo.2-amd64 (SMP w/8 CPU threads)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE, 
TAINT_UNSIGNED_MODULE
Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages libpython3.9-minimal:amd64 depends on:
ii  libc6      2.31-13+deb11u2
ii  libssl1.1  1.1.1k-1+deb11u1

Versions of packages libpython3.9-minimal:amd64 recommends:
ii  libpython3.9-stdlib  3.9.2-1

libpython3.9-minimal:amd64 suggests no packages.

-- no debconf information

Reply via email to