13 votos

¿Existe una forma de que GDAL genere excepciones correctamente en Python?

Estoy trabajando con GDAL en Python y he querido hacer que GDAL lance excepciones para poder hacer algo útil con ellas. Por ejemplo, si un archivo no se puede abrir con gdal.Open() me gustaría lanzar una excepción en lugar de que gdal devuelva None. Simplemente me gustaría una manera de capturar los errores en lugar de que se impriman en sys.stdout.

Actualmente he intentado usar la función gdal.UseExceptions() pero me encontré con un problema. Cuando se establece gdal.UseExceptions() parece ocultar ciertos errores y no lanzar una excepción. Por ejemplo, el mensaje ERROR 5: Access window out of range in RasterIO() Requested (1,15) of size 25x3 on raster of 26x17 desaparece y no se lanza ninguna excepción. Esto parece bastante peligroso.

Cualquier idea es apreciada, gracias.

11voto

csmba Puntos 2440
/*
** No queremos interferir con advertencias o mensajes de depuración ya que
** no se traducirán en excepciones.
*/
if (eclass == CE_Warning || eclass == CE_Debug ) {
    pfnPreviousHandler(eclass, code, msg );
}

El manejador UseExceptions no escucha nada más que CE_Error o CE_Fatal. Lo que estás viendo probablemente sea un mensaje CE_Warning o CE_Debug (verifica el valor de retorno de tu llamada funcional para ver a qué es igual).

Se hizo este compromiso para asegurarse de que las "nuevas" vinculaciones de Python se comportaran de manera similar a las "antiguas" vinculaciones de Python (que estaban hechas a mano con todo el manejo de errores siendo del tipo verifique el retorno). Estoy de acuerdo en que esto apesta.

Sientete libre de presentar un reporte para que podamos añadir niveles para que el manejador de excepciones escuche, como

UseExceptions(level=CE_Warning)
UseExceptions(level=CE_Debug)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X