[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
==============================================