Desde this question, ahora estoy haciendo un error de manejo de un nivel hacia abajo. Es decir, llamo a una función que llama a otra función más grande, y quiero donde falló en esa función más grande, no en la función más pequeña. Ejemplo específico El código es:Cuando encuentro una excepción, ¿cómo obtengo el tipo, archivo y número de línea del cuadro anterior?
import sys, os
def workerFunc():
return 4/0
def runTest():
try:
print workerFunc()
except:
ty,val,tb = sys.exc_info()
print "Error: %s,%s,%s" % (
ty.__name__,
os.path.split(tb.tb_frame.f_code.co_filename)[1],
tb.tb_lineno)
runTest()
de salida es:
Error: ZeroDivisionError,tmp2.py,8
pero la línea 8 es "imprimir workerFunc()" - Sé que la línea no, pero quiero la línea antes:
Error: ZeroDivisionError,tmp2.py,4