New submission from Felix Fontein <fe...@fontein.de>:
When argparse.BooleanOptionalAction is used with default=argparse.SUPPRESS and help is specified, trying to display --help results in a crash. Reproducer: import argparse parser = argparse.ArgumentParser() parser.add_argument('--test', action=argparse.BooleanOptionalAction, default=argparse.SUPPRESS, help='Foo') parser.parse_args() Result when running 'python t.py --help': Traceback (most recent call last): File "/path/to/t.py", line 4, in <module> parser.parse_args() File "/usr/lib/python3.10/argparse.py", line 1821, in parse_args args, argv = self.parse_known_args(args, namespace) File "/usr/lib/python3.10/argparse.py", line 1854, in parse_known_args namespace, args = self._parse_known_args(args, namespace) File "/usr/lib/python3.10/argparse.py", line 2063, in _parse_known_args start_index = consume_optional(start_index) File "/usr/lib/python3.10/argparse.py", line 2003, in consume_optional take_action(action, args, option_string) File "/usr/lib/python3.10/argparse.py", line 1931, in take_action action(self, namespace, argument_values, option_string) File "/usr/lib/python3.10/argparse.py", line 1095, in __call__ parser.print_help() File "/usr/lib/python3.10/argparse.py", line 2551, in print_help self._print_message(self.format_help(), file) File "/usr/lib/python3.10/argparse.py", line 2535, in format_help return formatter.format_help() File "/usr/lib/python3.10/argparse.py", line 283, in format_help help = self._root_section.format_help() File "/usr/lib/python3.10/argparse.py", line 214, in format_help item_help = join([func(*args) for func, args in self.items]) File "/usr/lib/python3.10/argparse.py", line 214, in <listcomp> item_help = join([func(*args) for func, args in self.items]) File "/usr/lib/python3.10/argparse.py", line 214, in format_help item_help = join([func(*args) for func, args in self.items]) File "/usr/lib/python3.10/argparse.py", line 214, in <listcomp> item_help = join([func(*args) for func, args in self.items]) File "/usr/lib/python3.10/argparse.py", line 530, in _format_action help_text = self._expand_help(action) File "/usr/lib/python3.10/argparse.py", line 627, in _expand_help return self._get_help_string(action) % params KeyError: 'default' The problem is that in https://github.com/python/cpython/blob/f54fee7f37563fbd569596cf94aad023ac6c3179/Lib/argparse.py#L879, default isn't tested for SUPPRESS as well. I've prepared a patch to fix that and will push it to GitHub soon. (I've experienced the crash with Python 3.9 and 3.10; the test I've created also crashes for the current main branch, so I guess that means that Python 3.11 is also affected. I haven't tested older Python versions before 3.9.) ---------- components: Library (Lib) messages: 408586 nosy: felixfontein priority: normal severity: normal status: open title: argparse.BooleanOptionalAction with default=argparse.SUPPRESS and help specified crashes versions: Python 3.10, Python 3.11, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue46080> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com