I'm working with argparse and am trying to mix sub-commands and positional arguments, and the following issue came up.

This code runs fine:

import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()

parser.add_argument('positional')
subparsers.add_parser('subpositional')

parser.parse_args('subpositional positional'.split())

The above code parses the args into Namespace(positional='positional'), however when I change the positional argument to have nargs='?' as such:

import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()

parser.add_argument('positional', nargs='?')
subparsers.add_parser('subpositional')

parser.parse_args('subpositional positional'.split())

It errors out with:

usage: [-h] {subpositional} ... [positional]
: error: unrecognized arguments: positional

Why is this?

Edit
Report