excepthook doesn't give exact line number

Hari Sekhon hpsekhon at googlemail.com
Thu Oct 5 07:40:11 EDT 2006


Thanks for the pointer, I've now got this giving me the right line 
number when an exception occurs, although I still get an empty stack 
trace from

print "Stack Trace:\n%s\n" % str(traceback.print_exc(2))

inside the excepthook.

Any ideas why this is?

Is there no traceback since the traceback was fed to the excepthook? Is 
there another way of getting the traceback like you see when the 
exception isn't caught?

Thanks for the help.

-h

Hari Sekhon



Peter Otten wrote:
> Hari Sekhon wrote:
>
>   
>> 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.
>>     
>
> A look into the traceback module shows that tracebacks are stored as a
> linked list. Here's a way to get hold of its tail:
>
> def tbiter(tb):
>     while tb is not None:
>         yield tb
>         tb = tb.tb_next
>
> def last(items):
>     for  item in items:
>         pass
>     return item
>
> # example usage
> def myexcepthook(type, value, tb):
>     tb_tail = last(tbiter(tb))
>     print tb_tail.tb_lineno
>  
> Peter
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20061005/7497a8ec/attachment.html>


More information about the Python-list mailing list