excepthook doesn't give exact line number

Hari Sekhon hpsekhon at googlemail.com
Tue Oct 3 09:03:51 EDT 2006


Hi,

I'm wondering if anyone can please help me on figuring out a better way 
of doing an excepthook. I have a script which is using an excepthook to 
catch any uncaught exceptions - there usually aren't any except when I 
am messing with the code, like right now  :-) 

The problem is that the excepthook gives the line of the topmost called 
function rather that the actual line that generated the error the way 
you get it with a normal traceback.


import sys, traceback

def myexcepthook(type,value,tb):
    <do something>
   
    exception_message = ( "\nLine no %s: %s - %s\n"
                                        "\nStack Trace:\n\n%s\n" % 
(tb.tb_lineno,type,value,str(traceback.print_exc(2))) )
   
    <send me an email etc....>

sys.excepthook = myexcepthook

<now do some work....>



So the tb object that is passed into the function gives the tb.tb_lineno 
as a line right near the end where the original topmost called function 
happens. This is a bit useless to me since I don't want to go looking 
for the exception manually through the entire code.

As you can see from my example, I have already used the traceback module 
which I usually use to give the normal traceback printout via 
traceback.print_exc(). Here it doesn't seem to work, it always give 
"None", likely because the excepthook has taken it or something.

Any guiding wisdom from the masters out there?

Much appreciated, thanks for reading.

-h

-- 
Hari Sekhon




More information about the Python-list mailing list