El desarrollo de código y los errores van siempre juntos, ahí está la gracia y el reto.

Cualquier programador tiene que dedicar tiempo a la detección de errores en código, algunos son obvios y se resuelven facilmente, pero otros!!! xD, la simple detección puede llevar horas.

Para ello, cuanta mas información tengamos mejor. Lo habitual es contar con un buen depurador, mostrar información en tiempo de ejecución y generar logs que generen trazas que podamos analizar tranquilamente.

El siguiente código python facilita mucho el trabajo al dar el dato exacto de la linea donde se ha producido el error:

import sys
import linecache

def get_exception():
	etype, eobj, etask = sys.exc_info()
	f = etask.tb_frame
	lineno = etask.tb_lineno
	filename = f.f_code.co_filename
	linecache.checkcache(filename)
	line = linecache.getline(filename, lineno, f.f_globals)
	stmp="\n------ ** Exception! ** %s, line %d:\n%s\n%s\n------" % (filename, lineno, line.strip(), eobj)
	return stmp
   
def print_exception():
	print(get_exception())

Con print_exception() mostramos la info por Terminal. Si queremos almacenarla en algún sitio, como un fichero de log o en base de datos podemos usar directamente get_exception() que devuelve la info en formato string.

Para utilizarla simplemente hacer la llamada dentro de except:.

def testDB_insert(pconn):
	try:
		pconn.execute("INSERT INTO TEST (ID, NAME) VALUES (1807, 'Alejandro')")
		pconn.commit()
	except:		
		print_exception()

En caso de error, muestra una salida como esta:

Espero que os simplifique el trabajo.

Saludos!