Da this question, ora eseguo la gestione degli errori a un livello inferiore. Cioè, chiamo una funzione che chiama un'altra funzione più grande, e voglio dove è fallita in quella funzione più grande, non nella funzione più piccola. Esempio specifico Codice è:Quando rilevo un'eccezione, come ottengo il tipo, il file e il numero di riga del fotogramma precedente?
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()
uscita è:
Error: ZeroDivisionError,tmp2.py,8
ma la linea 8 è "stampare workerFunc()" - So che la linea non è riuscito, ma voglio la linea prima:
Error: ZeroDivisionError,tmp2.py,4