Función de validación personalizada a inputCustom() en pyinputplus

Puede escribir una función para realizar su propia lógica de validación personalizada pasando la función a inputCustom(). Por ejemplo, digamos que quieres que el usuario introduzca una serie de dígitos que sumen 10. No existe la función pyinputplus.inputAddsUpToTen(), pero puedes crear tu propia función que:

  • Que acepte un único argumento de cadena de lo que el usuario ha introducido
  • Lanza una excepción si la cadena no es validada
  • Devuelve None (o no tiene declaración de retorno) si inputCustom() debe devolver la cadena sin cambios
  • Devuelve un valor no nulo si inputCustom() debe devolver una cadena diferente a la introducida por el usuario
  • Se pasa como primer argumento a inputCustom()

Por ejemplo, podemos crear nuestra propia función addsUpToTen(), y luego pasarla a inputCustom(). Observa que la llamada a la función parece inputCustom(addsUpToTen) y no inputCustom(addsUpToTen()) porque estamos pasando la propia función addsUpToTen() a inputCustom(), no llamando a addsUpToTen() y pasando su valor de retorno.

>>> import pyinputplus as pyip
>>> def addsUpToTen(numbers):
...   numbersList = list(numbers)
...   for i, digit in enumerate(numbersList):
...     numbersList[i] = int(digit)
...   if sum(numbersList) != 10:
...     raise Exception('The digits must add up to 10, not %s.' %
(sum(numbersList)))
...   return int(numbers) # Return an int form of numbers.
...
>>> response = pyip.inputCustom(addsUpToTen) # No parentheses after
addsUpToTen here.
123
The digits must add up to 10, not 6.
1235
The digits must add up to 10, not 11.
1234
>>> response # inputStr() returned an int, not a string.
1234
>>> response = pyip.inputCustom(addsUpToTen)
hello
invalid literal for int() with base 10: 'h'
55
>>> response

La función inputCustom() también soporta las características generales de PyInputPlus, como los argumentos de palabra clave blank, limit, timeout, default, allowRegexes y blockRegexes.

Deja una respuesta