[파이썬] argparse 인수의 validation 추가

In Python, the argparse module provides a convenient way to parse command-line arguments. However, if you want to ensure that the arguments passed to your program meet certain conditions or constraints, you need to add validation to your argparse arguments.

Let’s take a look at how to add validation to argparse arguments using Python.

Basic Argument Parsing with argparse

First, let’s do a quick refresher on how to parse command-line arguments using argparse. Here’s a simple example:

import argparse

parser = argparse.ArgumentParser(description='My CLI Program')
parser.add_argument('file', help='Path to the file')

args = parser.parse_args()
print(f"File path: {args.file}")

In this example, we define a single positional argument called file that represents the path to the file. We can run this program from the command line like this:

python my_program.py some_file.txt

The output will be:

File path: some_file.txt

Adding Validation to argparse Arguments

To add validation to argparse arguments, we can use the type and choices parameters of the add_argument method.

Using type Parameter

The type parameter lets you specify the type of the argument’s value. This allows you to enforce type constraints. For example, suppose we want to ensure that the file path provided by the user is a valid path.

import argparse
import os

def valid_file_path(path):
    if not os.path.exists(path):
        raise argparse.ArgumentTypeError(f"File '{path}' does not exist")
    return path

parser = argparse.ArgumentParser(description='My CLI Program')
parser.add_argument('file', type=valid_file_path, help='Path to the file')

args = parser.parse_args()
print(f"File path: {args.file}")

In this modified version of our previous example, we define a custom function valid_file_path that checks if the file exists. The type parameter is set to this function, ensuring that the argument value is validated according to our custom logic.

The argparse.ArgumentTypeError exception can be raised to display a more informative error message if the validation fails. If the validation succeeds, the value is returned and assigned to the args.file attribute.

Using choices Parameter

The choices parameter allows you to specify a list of predefined choices for the argument. This can be useful when you want to restrict the possible values of an argument. For example, suppose we want to limit the file extensions to a specific set of values.

import argparse

parser = argparse.ArgumentParser(description='My CLI Program')
parser.add_argument('file', choices=['txt', 'csv', 'json'], help='File extension')

args = parser.parse_args()
print(f"File extension: {args.file}")

In this case, the choices parameter is set to a list containing the allowed file extensions. If the user provides an invalid value, argparse will automatically display an error message and exit.

Conclusion

Adding validation to argparse arguments can help ensure that the user’s inputs meet certain conditions or constraints. By using the type and choices parameters of the add_argument method, you can easily enforce validation rules on your program’s command-line arguments.

Remember that validation is just one aspect of argument parsing, and there are many other features and options available in the argparse module. Be sure to explore the official Python documentation to learn more about this powerful module.