Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

Depuración eficaz con la declaración de afirmación de Python

Depuración efectiva con la declaración de afirmación de Python
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

¿Eres un programador? Si es así, la depuración es una habilidad esencial, independientemente del lenguaje en el que esté codificando. En este artículo, aprenderá a usar el afirmar declaración en Python para una depuración efectiva.

Cuando esté trabajando en un proyecto, definirá varios módulos. Esto incluye funciones, definiciones de clase y más. Y es probable que encuentre errores o resultados inesperados debido a un error en la implementación. Las declaraciones de afirmación son útiles para depurar dicho código.

En este tutorial, aprenderemos la sintaxis para usar la declaración de afirmación seguida de ejemplos de código para verla en acción. También veremos qué son los errores de aserción y cómo podemos usarlos para corregir los errores en el código durante el desarrollo.

Vamos a empezar!

How to Use the Assert Statement in Python

Aprenderemos la sintaxis para usar la declaración de afirmación, luego procederemos a codificar algunos ejemplos.

Sintaxis de la declaración de afirmación

Comencemos con la sintaxis para usar la declaración de afirmación en Python:

assert expression, message

Aquí,

  • expression es cualquier expresión de Python válida para ser evaluada. Esto puede ser una condición sobre el valor de la variable, el valor de verdad de la variable, el valor de retorno de una función y más.
  • Mientras el expression evalúa a True, la declaración de afirmación no arroja un error ni devuelve nada. Esto indica que el programa funciona como se esperaba.
  • Si expression ya no es True, un AssertionError Se plantea una excepción.
  • message es un opcional cadena. Puede especificar un mensaje que se muestra en el seguimiento cada vez que un AssertionError Se plantea una excepción.

A continuación, procedamos a codificar algunos ejemplos en los que la declaración de afirmación puede ayudarnos a escribir un código más limpio y sin errores.

Puede encontrar los ejemplos de código utilizados en este tutorial en esta esencia de GitHub.

Python’s Assert Statement Examples

Pythons-Assert-Statement-Examples

Considere el siguiente ejemplo. Di que tienes un discount variable en su código. Pero le gustaría que su valor sea siempre menor o igual que el max_discount.

Para comprobar que accidentalmente no configura el discount variable a un valor, puede agregar una aserción. La expresión a evaluar es: discount <= max_discount.

>>> max_discount = 50
>>> discount = 20
>>> assert discount <= max_discount

Aquí, discount (20) es menor que max_discount (50). Entonces, la declaración de afirmación no arroja ningún error.

La excepción AssertionError

Si discount variable se establece en un valor mayor que max_discount, un AssertionError Se plantea una excepción.

>>> discount = 75
>>> assert discount <= max_discount
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

Sabemos que la declaración de afirmación también nos permite especificar una cadena de mensaje opcional.

También usemos una cadena de mensaje que brinde una información de diagnóstico más descriptiva. A la declaración de afirmación, agreguemos una cadena f de Python que también contiene los valores de discount y max_discount.

>>> assert discount <= max_discount, f"discount should be at most {max_discount}; got discount = {discount}"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: discount should be at most 50; got discount = 75

Como se ve en la celda de salida anterior, el AssertionError excepción ahora incluye los valores de la discount y max_discount variables.

Debugging and Testing Python Functions with Assert

Al definir funciones, a veces puede introducir errores (errores lógicos) sin darse cuenta que evitarán que su función funcione según lo previsto.

Funciones de depuración y prueba de Python con afirmación

Tomemos un ejemplo. Supongamos que hay una prueba en una clase y los estudiantes tienen la oportunidad de intentar una pregunta adicional. Cualquier estudiante que intente responder la pregunta adicional obtendrá 10 puntos adicionales en la prueba. 😄

Considere la siguiente función get_final_score:

  • Toma en una puntuación actual, score, y un booleano bonus
  • Si un estudiante ha respondido la pregunta de bonificación, el valor booleano bonus is True, y obtienen 10 puntos más que su puntaje actual.
  • A continuación, la función devuelve la puntuación final.
def get_final_score(score,bonus):
    if bonus:
        score += 10
    return score

Hagamos algunas llamadas a la función. Vemos que para puntuaciones de 34 y 40 con bonus establecido en True y False, las puntuaciones finales son 44 y 40, respectivamente.

print(get_final_score(34,True))
# 44
print(get_final_score(40,False))
# 40

Sin embargo, el máximo de puntos en la prueba es, digamos, 50. Entonces, si un estudiante obtiene 49 y también respondió la pregunta adicional, la función get_final_score felizmente calculará la puntuación final en 59.

print(get_final_score(49,True))
# 59

Técnicamente, es posible. Pero supongamos que un estudiante no puede obtener más que los puntos máximos posibles para la prueba. 🙂

Así que vamos a inicializar un max_score variable. Y capturar la puntuación devuelta de la función en el final_score variable.

Posteriormente añadimos una afirmación que comprueba si el final_score es menor que el max_score.

def get_final_score(score,bonus):
    if bonus:
        score += 10
    return score

final_score = get_final_score(47,True)
max_score = 50

assert final_score <= max_score

Ahora obtenemos una excepción AssertionError para la llamada de función get_final_score(47,True):

Traceback (most recent call last):
  File "main.py", line 17, in <module>
    assert final_score <= max_score
AssertionError

Ahora agregamos una cadena f descriptiva a la declaración de afirmación de Python:

assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
Traceback (most recent call last):
  File "main.py", line 17, in <module>
    assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
AssertionError: final_score should be at most 50; got 57

Modificación de la función

Volvamos atrás y modifiquemos la definición de la get_final_score función para corregir el comportamiento inesperado:

  • La función get_final_score también toma max_score como un parámetro.
  • Comprobamos si bonus es verdad. Si es Verdadero, sumamos 10 puntos a la variable puntuación.
  • Entonces, comprobamos si score es mayor que max_score. Si es así, volvemos max_score.
  • De lo contrario, volvemos score.

Ahora nos hemos asegurado de que la puntuación final sea siempre menor o igual que max_score.

def get_final_score(score,bonus,max_score):
    if bonus:
        score += 10
    if score > max_score:
        return max_score
    return score

Como ejercicio rápido, escriba algunas afirmaciones para confirmar que la función ahora funciona como se esperaba.

A Note on AssertionError Exception

Aunque se produce una excepción AssertionError cuando la expresión se evalúa como Falsa, debemos recordar no manejar errores como excepciones. lo que significa que nosotros no debería hacer algo como esto:

try:
    <doing this>
except AssertionError:
    <do this>

En el ejemplo anterior de get_final_score, usamos la aserción para verificar si final_score es menor que max_score. Entonces nosotros modificó la definición de la función tal que no haya errores de aserción.

Eso es lo afirmaciones son para. Son controles de cordura para el código y ayudan a escribir un código más limpio. El manejo de excepciones, por otro lado, es anticipar y manejar errores inesperados en tiempo de ejecución. Estos a menudo incluyen tipos y valores de entrada no válidos.

En resumen, debe usar la declaración de aserción de Python para una depuración efectiva y no manejar AssertionErrors como excepciones.

Conclusión

Este tutorial lo ayudó a comprender cómo usar la declaración de afirmación en Python. Aquí tienes un resumen de lo que has aprendido:

  • Las declaraciones de afirmación de Python (afirmaciones) toman la forma assert expression. Esto comprueba si el expression is True. Si no se evalúa a True, un AssertionError Se plantea una excepción.
  • También puede usar la afirmación con la sintaxis assert expression, message. Esto imprimirá el message cadena cada vez que un AssertionError ocurre una excepción.
  • Debe recordar no implementar el manejo de excepciones para manejar errores de aserción. Y utilice las aserciones como una útil herramienta de depuración para las comprobaciones de cordura de su código.

Como desarrollador, las aserciones lo ayudan con la depuración. Para asegurarse de que todos los componentes individuales (módulos) del proyecto funcionen como se espera, puede aprender a escribir pruebas unitarias en Python.

A continuación, consulte esta lista de proyectos de Python para principiantes puedes trabajar.

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder