[pygtk] TypeError exception without traceback

Aaron Optimizer Digulla digulla@hepe.com
Tue, 07 Nov 2000 09:49:58 +0100 (CET)


Quoting James Henstridge <james@daa.com.au>:

> > The problem is that timeout_add() doesn't give Python any hints
> > what it should print as traceback. I submitted this as a bug in
> > Python but Guide said this is a bug in PyGTK and I should post
> > this here. The solution is probably that timeout_add() must
> > put a traceback in the newly created callback and print that
> > in case of an error.
> 
> He is right, it isn't a bug in Python :)
> 
> The exception is being caught just after the callback finishes, rather
> than propagating up the call stack.  The traceback only contains
> information about the frames that don't catch the exception.
> 
> You can get complete traceback info by turning on `fatal exceptions'. 
> If
> you turn this on, if an exception occurs within a signal or callback,
> the
> main loop will be quit, and right back to the initial main loop call.
> 
> This can be turned on by defining the environment variable
> PYGTK_FATAL_EXCEPTIONS to something non false (eg. 1).  It checks the
> environment variable through the os.environ dictionary, so you should be
> able to set this from within your script if you want.

This not correct; my app has this turned on and it makes no difference
(it also makes no difference in the test code, just in case :-). The problem
is that at the time where the exception is thrown, there is no stack
trace which Python could print. The solution as I see it is to ask the
traceback module for a stacktrace when timeout_add() is called and pass
that into the C code. The C code which executes the timeout python code
must then check for exceptions and prepend the stacktrace above to the
stacktrace which the exception contains.

I think that python does not allow this (prepending/concatenating stack
traces) and therefore I submitted a bugreport. Since this is a show stopper
right now, I'll try to patch pygtk to fix this.

-- 
==============================================
Sowatec AG,       CH-8330 Pfäffikon (ZH)
Witzbergstr. 7,   http://www.sowatec.com
Tel: +41-(0)1-952 55 55
Fax: +41-(0)1-952 55 66
----------------------------------------------
Aaron "Optimizer" Digulla, digulla@sowatec.com
==============================================