¿Cómo manejar argumentos no válidos con argparse en Python?

El módulo Argparse proporciona facilidades para mejorar la interfaz de línea de comandos. Los métodos asociados con este módulo facilitan la codificación de programas de interfaz de línea de comandos, así como una mejor interacción. Este módulo genera automáticamente mensajes de ayuda y genera un error cuando se pasan argumentos inapropiados. Incluso permite personalizar los mensajes que se muestran en caso de argumentos inválidos.

Maneras de manejar argumentos inválidos

1. Función definida por el usuario y parámetro ‘tipo’

El módulo argparse tiene una función llamada add_arguments() donde se indica el tipo al que se debe convertir el argumento. En lugar de utilizar los valores disponibles, se puede pasar una función definida por el usuario como valor a este parámetro. Esto será útil en muchos casos, ya que podemos definir nuestros propios criterios para que el argumento sea válido después de la conversión. Por ejemplo, tomemos un ejemplo simple. Uno tiene que ingresar un número en el rango de 5 a 15, si excede, entonces se debe generar un error y eso también inmediatamente después de la conversión. De lo contrario, se mostrará el cuadrado del número. Mire el código de python a continuación que se guarda como find_square.py

Python

import argparse
  
# function to convert the input and 
# check the range
def checker(a):
    num = int(a)
      
    if num < 5 or num > 15:
        raise argparse.ArgumentTypeError('invalid value!!!')
    return num
  
  
parser = argparse.ArgumentParser(
    description='Processing integers in range 5 to 15')
  
# passing the function for 'type' parameter
parser.add_argument('n', type=checker)
  
res = parser.parse_args()
print("square is :", res.n*res.n)

Producción:

 resultado de find_square.py

Si el argumento pasado no está en el rango dado, por ejemplo, el argumento dado por primera vez en la imagen de arriba ‘ 3 ‘, ¡¡¡el mensaje de error no es válido!!! se visualiza. El argumento pasado la próxima vez es 10 , que está en el rango especificado y, por lo tanto, se imprime el cuadrado de 10.

Ahora, mire otro ejemplo, en el que no desea escribir convertir la entrada, sino especificar algunos criterios para que pueda ser una entrada válida. El programa que se muestra a continuación toma dos argumentos: uname, pwd (nombre de usuario, contraseña) . Aquí, el criterio para configurar el nombre de usuario es que debe tener al menos 5 caracteres pero no más de 8. La contraseña debe tener al menos 1 dígito, al menos 2 letras y al menos 1 carácter especial. El analizador está configurado para procesar de esa manera y el programa se almacena como pwd_check.py .

Python

import argparse
  
# function to check user name
def checker(a):
    if len(a) > 8 or len(a) < 5:
        raise argparse.ArgumentTypeError(
            'user name should have atleast 5 characters \
            but not more than 8 characters!!!')
    return
  
# function to check password
def checker_pwd(b):
  
    d = 0  # initial count of digits
    a = 0  # initial count of alphabets
    ss = 0  # initial count of special characters
  
    for i in range(0, len(b)):
      # increment alphabet count
        if (b[i] >= 'a' and b[i] <= 'z') or (b[i] >= 'A' and b[i] <= 'Z'):
            a = a+1
  
      # increment digit count
        elif (b[i] >= '0' and b[i] <= '9'):
            d = d+1
  
       # increment special characters count
        else:
            ss = ss+1
  
    # check criteria
    if d < 1 or a < 2 or ss < 1 or len(b) > 6:
        raise argparse.ArgumentTypeError(
            'Password doesnt match the criterias!!')
    return
  
  
parser = argparse.ArgumentParser()
parser.add_argument('uname', type=checker)
parser.add_argument('pwd', type=checker_pwd)
parser.parse_args()

Producción:

salida pwd_check.py

  • Primera ejecución: los argumentos son geek 12345678 . El nombre de usuario debe tener al menos 5 caracteres.
  • Segunda tirada: los argumentos son frikis 12345678 . El criterio de la contraseña no se cumple.
  • Tercera ejecución: los argumentos son geeks 123abc@# . Estos pasan todas las restricciones y así el sistema sale.

2. Usando ArgumentError()

Esta función toma dos parámetros, a saber, el argumento y el mensaje que se mostrará. Para usar esto, se debe configurar una variable que se refiera al argumento. Mira el ejemplo de abajo. El programa toma dos valores del usuario, el primero debe ser un número impar y el segundo debe ser un número par. Se guarda como odd_even.py .

Python

import argparse
  
parser = argparse.ArgumentParser()
  
# a variable to hold odd numbers
ref_arg1 = parser.add_argument('odd', type=int)
  
# a variable to hold even number
ref_arg2 = parser.add_argument('even', type=int)
  
args = parser.parse_args()
  
# raising error in cas of
if args.odd % 2 == 0:
    raise argparse.ArgumentError(ref_arg1, "Argument 1 Can't \
    be even number!!")
  
if args.even % 2 != 0:
    raise argparse.ArgumentError(ref_arg1, "Argument 2 Can't be\
    odd number!!")

Producción:

salida impar_par.py

 

Publicación traducida automáticamente

Artículo escrito por erakshaya485 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *