febrero 2014

You are currently browsing the monthly archive for febrero 2014.

Usando la librería estándar de Python unittest se puede comprobar si un trozo de código lanza una excepción. Pero ¿cómo comprobar que un trozo de código no lanza una excepción? Además, ¿cómo hacer para que la información de la excepción se muestre de forma correcta al ejecutar los tests?

Para comprobar que no se lanza una excepción simplemente se puede introducir el código a comprobar dentro de un bloque try…except y hacer fallar manualmente al test si se captura una excepción:

try:
    my_code()
except:
    self.fail("Exception captured")

(vía StackOverflow)

Sin embargo la información de la excepción no se muestra correctamente. Para arreglar esto podemos usar la librería estándar traceback para mostrar la información de la excepción:

import traceback
(...)
try:
    my_code()
except:
    self.fail(traceback.format_exc())

Solo recordad que los bloques try…except estarán dentro de la función y la clase de prueba correspondiente.

A veces necesitamos instalar librerías de Python que dependen de librerías externas. En el caso de estar trabajando con Mac, una de las opciones más populares para instalar librerías adicionales es MacPorts. El problema viene cuando las librerías de Python no detectan bien las librerías instaladas por MacPorts.

Una de las opciones más sencillas que puede funcionar, dependiendo del caso, es decirle directamente al compilador la localización de las cabeceras y las librerías. Por ejemplo:

CPPFLAGS="-I/opt/local/include" LDFLAGS="-L/opt/local/lib" python setup.py install --user

(gracias por esta pista)

El último caso en el que me he visto obligado a hacer esto es con la interesante librería Cartopy que requiere GEOS. Como el proyecto es un poco joven aún, parece que no tienen aún pulidos los detalles para la instalación en un Mac. Con el comando anterior la librería compila y se instala sin problema.

Un último detalle. La opción –user de la línea anterior le indica a Python que instale la librería solo para el usuario. Los ejecutables se instalan en ~/Library/Python/2.7/bin/ y las librerías en ~/Library/Python/2.7/lib. Esto es una practica muy aconsejable para evitar posibles problemas. Si algo sale realmente mal solo tendríamos que borrar los directorios anteriores y empezar de nuevo.

Tags: , , , ,