Afirmaciones en Python

Una afirmación es una verificación de cordura que puede activar o desactivar cuando haya terminado con la prueba del programa.

La forma más fácil de pensar en una afirmación es compararla con una raise-ifdeclaración (o para ser más precisos, una declaración de aumento si no). Se prueba una expresión y, si el resultado es falso, se genera una excepción.

Las afirmaciones se llevan a cabo mediante la declaración assert, la palabra clave más nueva de Python, introducida en la versión 1.5.

Los programadores a menudo colocan aserciones al comienzo de una función para verificar una entrada válida y después de una llamada de función para verificar una salida válida.

La declaración de aserción

Cuando encuentra una declaración de aserción, Python evalúa la expresión que la acompaña, que es de esperar que sea verdadera. Si la expresión es falsa, Python genera una excepción AssertionError .

La sintaxis para aseverar es:

assert Expression[, Arguments]

Si la aserción falla, Python usa ArgumentExpression como argumento para AssertionError. Las excepciones AssertionError se pueden capturar y manejar como cualquier otra excepción usando la declaración try-except, pero si no se manejan, terminarán el programa y producirán un rastreo.

Ejemplo

Aquí hay una función que convierte una temperatura de grados Kelvin a grados Fahrenheit. Dado que cero grados Kelvin es tan frío como se pone, la función se rescata si ve una temperatura negativa:

#!/usr/bin/python

def KelvinToFahrenheit(Temperature):
   assert (Temperature >= 0),"Colder than absolute zero!"
   return ((Temperature-273)*1.8)+32

print KelvinToFahrenheit(273)
print int(KelvinToFahrenheit(505.78))
print KelvinToFahrenheit(-5)

Cuando se ejecuta el código anterior, produce el siguiente resultado:

32.0
451
Traceback (most recent call last):
   File "test.py", line 9, in <module>
      print KelvinToFahrenheit(-5)
   File "test.py", line 4, in KelvinToFahrenheit
      assert (Temperature >= 0),"Colder than absolute zero!"
AssertionError: Colder than absolute zero!