I was wondering why the inconsistency between the case-transformation of optional and positional arguments in Python's argparse. Adding the '--optional-argument' to the parser will be named 'optional_argument', but positional argument would stay positional-argument.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('positional-argument')
parser.add_argument('--optional-argument')
arg_dict = vars(parser.parse_args('Positional --optional-argument Optional'.split()))
print(arg_dict)
# {'positional-argument': 'Positional', 'optional_argument': 'Optional'}
I could change the way I add the positional argument to the parser, but the inconsistency would remain (though at a different place)
parser.add_argument('positional_argument')
parser.add_argument('--optional-argument')
# {'positional_argument': 'Positional', 'optional_argument': 'Optional'}
Looks like this is a known issue. https://bugs.python.org/issue15125
Suggested workarounds:
If you use 'positional-argument', you can extract it from the namespace using getattr().
If you use 'positional_argument', you can change how it is displayed in the help output with metavar='positional-argument'.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With