argparse icon indicating copy to clipboard operation
argparse copied to clipboard

Define optional argument with exactly 1 value, + default value

Open nmoreaud opened this issue 1 year ago • 7 comments

Hello,

I try to define an optional parameter with a value + default value, but it doesn't work as I expect. I use version 3.0.

What I'd like to obtain:

  • Optional [] in usage section: Usage: [--format1 VAR] --format2 VAR --format3 VAR [--format4 VAR] ok for format1 and format4
  • Exception if argument is called without value: ok for --format2 and --format3
  • No mention of [nargs=0..1] in argument section:
--format1                  Image format [jpg|png] [nargs=0..1] [default: "jpg"]
--format2                  Image format r1 [jpg|png] [default: "jpg"]                            => ok
--format3                  Image format r [jpg|png] [nargs=0..1] [default: "jpg"]
--format4                  Image format 1 [jpg|png] [default: "jpg"]                             => ok
  • No mention of [required] in argument section: ok for all
  • Listed in "Optional arguments" section: ok for all

Could you help me?

Here is a sample program:

        command.add_argument("--format1")
            .default_value(string("jpg"))
            .help("Image format [jpg|png]");

        command.add_argument("--format2")
            .default_value(string("jpg"))
            .required()
            .nargs(1)
            .help("Image format r1 [jpg|png]");

        command.add_argument("--format3")
            .default_value(string("jpg"))
            .required()
            .help("Image format r [jpg|png]");

        command.add_argument("--format4")
            .default_value(string("jpg"))
            .nargs(1)
            .help("Image format 1 [jpg|png]");

nmoreaud avatar Mar 20 '24 15:03 nmoreaud

  • I suggest reading README, it has answers of all your questions.

Eng-MohamedHussien avatar Aug 27 '24 17:08 Eng-MohamedHussien

Let's discuss sample program:

command.add_argument("--format1")
            .default_value(string("jpg"))
            .help("Image format [jpg|png]");
  • If you didn't provide that argument, no exception will be fired as you provided a default value. Screenshot from 2024-08-27 20-27-29
  • --help output:
--format1      Image format [jpg|png] [nargs=0..1] [default: "jpg"]
  • You can do the same for argument --format4.

Eng-MohamedHussien avatar Aug 27 '24 17:08 Eng-MohamedHussien

  • --format2 & --format3 are same.
command.add_argument("--format3")
            .default_value(string("jpg"))
            .required()
            .help("Image format r [jpg|png]");
  • By adding here default_value you lost the exception that will be fired when no argument is passed (Read previous mentioned section).

Eng-MohamedHussien avatar Aug 27 '24 17:08 Eng-MohamedHussien

  • Correct version:
command.add_argument("--format1")
    .default_value(string("jpg"))
    .help("Image format [jpg|png]");

command.add_argument("--format2")
    .required()
    .help("Image format [jpg|png]");

command.add_argument("--format3")
    .required()
    .help("Image format [jpg|png]");

command.add_argument("--format4")
    .default_value(string("jpg"))
    .help("Image format [jpg|png]");
  • Help output: Screenshot from 2024-08-27 20-42-07

Eng-MohamedHussien avatar Aug 27 '24 17:08 Eng-MohamedHussien

@nmoreaud, If you don't have extra questions, kindly close the ticket.

Eng-MohamedHussien avatar Aug 27 '24 17:08 Eng-MohamedHussien

@p-ranav, Kindly close the ticket.

Eng-MohamedHussien avatar Sep 03 '24 15:09 Eng-MohamedHussien

Hello I cannot test now, but I don't really see an answer to my question. Basically you recommend to use either "default" or "required" and none of these two syntaxes seem to address every point of the question. The 4 syntaxes in the ticket description are 4 attempts to address every point of the question, and none of them is correct. But you can also close the ticket as "by design".

nmoreaud avatar Sep 03 '24 16:09 nmoreaud