2010-06-22 21 views
5

Cuando termina mi proceso, me da salida a stderr que se parece a:Cómo hacer una depuración una excepción al apagar el pitón

Exception exceptions.TypeError: "'NoneType' object is not callable" in <function <lambda> at 0x5507d70> ignored 

Mi opinión es que esto es causado por las excepciones que se generan durante la recolección de basura (del()?) O la devolución de llamada weakref que sé que se está utilizando en esta aplicación.

¿Cuáles son algunos métodos para averiguar de dónde viene esto?

+0

¿Se puede reemplazar la lambda con funciones reales? –

+1

Esto es demasiado genérico. ¿Podría publicar más de la salida? Y posiblemente las últimas líneas de código que se ejecutan. Con tan poca información, es difícil saber si simplemente está topando con una variable inesperada o algo extraño. – rbp

+0

Estoy buscando una solución de propósito general para este tipo de error. Realmente solo quiero saber si hay una manera de obtener más información del intérprete cuando esto sucede. Un rastro completo sería agradable. Sospecho que el problema real se debe a que algunos módulos obtienen basura recolectada antes de que se llame a esta función. – rhettg

Respuesta

1

El problema aquí no es con las funciones lambdas: lambda do tiene información de depuración.

a = lambda: 1 
print a.func_code.co_filename 
print a.func_code.co_firstlineno 

(. a.__code__ en python3)

el problema es con el formato excepción fallback: no se muestra una traza de la pila, que es donde normalmente se muestra esta información.

Si quiere tratar de mejorar esto, el problema parece estar en Python/errors.c, en PyErr_WriteUnraisable(). No sé si hay problemas más profundos que dificulten esto, pero sospecho que no. El rastreo debe estar en "tb" después de llamar a PyErr_Fetch().

6

Ejecute su programa de Python con la opción -v para que pueda ver en qué punto durante las etapas finales se lanza la excepción. Me ayudó cuando encontré la misma situación; también con sqlalchemy ...

Cuestiones relacionadas