Excepciones en plpython
Oswaldo Hernández
listas en soft-com.es
Mar Mayo 6 22:04:44 CEST 2008
Chema Cortes escribió:
> El 2008/5/6 Oswaldo Hernández <listas en soft-com.es> escribió:
>
>> Estoy haciendo una funciones en plpython (PostgreSQL) y no consiguo
>> capturar correctamente las excepciones de la base de datos, es decir,
>>
>> En una funcion:
>>
>> try:
>> plpy.execute("select .......")
>> except Exception, e:
>> plpy.error("Error ejecucion:<%s>, %s" % (e.__class__, str(e))
>>
>> Si se produce un error del lado de la base de datos (sql erroneo, etc ..)
>> siempre me tira la misma excepción, sea cual sea el error:
>> "Error execute <<type 'exceptions.SystemError'>>, error return without
>> exception set",
>
> Según la documentación, plpy.error() siempre lanza una excepción
> python, responsable del final de la transacción que se está ejecutando
> al no ser interceptada. No creo que sea éso lo que quieras hacer.
>
Hola Chema,
No, el problema es que no puedo cancelar las excepciones de Postgres. El except las captura, pero si
quieres cancelarla no puedes, siempre aborta y lanza la excepción.
Esto solo pasa con las excepciones del SPI, con las excepciones normales de python si funciona bien.
CREATE OR REPLACE FUNCTION pruebas.pytest3() RETURNS integer AS
$BODY$
try:
rws = plpy.execute("select 1/0")
except Exception, e:
plpy.notice("Error:", str(e))
return 1
$BODY$
LANGUAGE 'plpythonu' VOLATILE SECURITY DEFINER
Esta funcion deberia capturar la excepcion de Postgres, emitir un notice y hacer un return 1 sin mas
consecuencias, sin embargo el resultado es:
select pruebas.pytest3()
WARNING: plpython: in function pytest3:
DETALLE: <class 'plpy.SPIError'>: Unknown error in PLy_spi_execute_query
NOTICE: ('Error:', 'error return without exception set')
ERROR: división por cero
CONTEXTO: sentencia SQL: «select 1/0»
He localizado el codigo de plpython y hay unos comentarios del autor sobre este tema.
<http://doxygen.postgresql.org/plpython_8c-source.html>
(linea: 270)
Gracias por tu respuesta.
Saludos,
--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es