def parse(self, argv):
if not argv and self.optional:<EOL><INDENT>self.value = [] if self.recurring else None<EOL>return<EOL><DEDENT>try:<EOL><INDENT>value = self.format.parse(argv)<EOL>if not self.recurring:<EOL><INDENT>self.value = value<EOL>return<EOL><DEDENT>self.value = [value]<EOL>while argv:<EOL><INDENT>self.value.append(self.format.parse(argv))<EOL><DEDENT><DEDENT>except formats.BadNumberOfArguments as e:<EOL><INDENT>raise BadNumberOfArguments(self.displayname, e.required, e.given)<EOL><DEDENT>except formats.BadArgument as e:<EOL><INDENT>raise BadArgument(self.displayname, e.argument, e.details)<EOL><DEDENT>
Consume and process arguments and store the result.

        argv is the list of arguments to parse (will be modified).

        Recurring PositionalArgumants get a list as .value.

        Optional PositionalArguments that do not get any arguments to parse get
        None as .value, or [] if recurring.