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:
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:
- 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:
Publicación traducida automáticamente
Artículo escrito por erakshaya485 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA