Skip to main content
  1. Posts/

Set up the Default Value for Boolean Option in Argparse

··280 words·2 mins·

TL;DR

If you want to set a parameter’s default value to True using argparse, use

parser.add_argument('--param', action='store_false')

Otherwise, use

parser.add_argument('--param', action='store_true')

when we use argparse to manager program parameters and add a parameter, we often use the action options to set the parameter’s value to a boolean value. But I have previously misunderstood this options and made a mistake. In this post, I will explain how does this option work and how to use it correctly.

Typically we use action='store_true' or action='store_false' to set the parameter to boolean value. Previously, I thought that action='store_true' will set the parameter value to True and action='store_false' will set the parameter value to False. In fact, it is not true. Suppose we have a script toy_parser.py:

import argparase

parser = argparse.ArgumentParser(description="A toy argument parser")
parser.add_argument('--param1', action='store_true')
parser.add_argument('--param2', action='store_false')

args = parser.parse_args()

print(args)

If we run this script on the command line with no argument

python toy_parser.py

the output will be:

Namespace(param1=False, param2=True)

The result is exactly contratry to what we thought.

What about run the script with parameters?

$ python toy_parser.py –param1 –param2 Namespace(param1=True, param2=False)

$ python toy_parser.py –param1 Namespace(param1=True, param2=True)

$ python toy_parser.py –param2 Namespace(param1=False, param2=False)

In summary, if a parameter has action store_true but is missing in the command line, the default value will be False, otherwise, the value will be True. Similarly, if a parameter has action store_false but is missing in the command line, the default value will be True, otherwise, the value will be False.

The following two statements are problematic:

parser.add_argument('--param1', action='store_true', default=True)
parser.add_argument('--param2', action='store_false', default=False)

Wheter you use these paramters on the command line, they will always be True or False, which is not what we want.

Related

Configure Python logging with dictConfig
··503 words·3 mins
Black Formatter Setup for Python Project
··371 words·2 mins
Using Virutal Environment in Python with venv
·254 words·2 mins