Hi! Both the 3.4 version and the current version of python documentation wrt the argparse module imply convert_arg_line_to_args replacements needs to accept two arguments while it acutally only works with one. (Not completely sure about details but documentation really could be clearer!) https://docs.python.org/3.4/library/argparse.html#argparse.ArgumentParser.convert_arg_line_to_args Example from documentation def convert_arg_line_to_args(self, arg_line): return arg_line.split() If codeparser = argparse.ArgumentParser actually does def convert_arg_line_to_args(self, arg_line): return arg_line.split() parser = argparse.ArgumentParser() parser.convert_arg_line_to_args = convert_arg_line_to_args The code fails File "/usr/lib/python3.5/argparse.py", line 1735, in parse_args args, argv = self.parse_known_args(args, namespace) File "/usr/lib/python3.5/argparse.py", line 1767, in parse_known_args namespace, args = self._parse_known_args(args, namespace) File "/usr/lib/python3.5/argparse.py", line 1779, in _parse_known_args arg_strings = self._read_args_from_files(arg_strings) File "/usr/lib/python3.5/argparse.py", line 2037, in _read_args_from_files for arg in self.convert_arg_line_to_args(arg_line): TypeError: convert_arg_line_to_args() missing 1 required positional argument: 'arg_line'
The documentation assumes you know how python class methods work, but I agree that the wording is not entirely obvious even then and could be improved. In particular it should make clear that the example shows how to define the function for subclassing or assignment to the class object. If you assign it to the instance, as in your example, then indeed self does not get passed and you want a true single argument function.
Hello, I updated the documentation with an example of how to override ArgumentParser class. Hope this is a clearer than before. Please review. Thanks :)