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) siinputCustom()
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
porque estamos pasando la propia función inputCustom(addsUpToTen())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
.