[IPython-user] ipython prevents sys.last_traceback (etc.) from being set?

Zachary Pincus zpincus at stanford.edu
Fri Mar 10 13:16:15 CST 2006


Thanks for your exegesis of the issues at play here. It certainly  
looks pretty involved.

> So I'm fully open to revisiting this problem and finding the best  
> possible compromise, but I know it's a bag of thorns.  If we can  
> find a sensible solution (not necessarily perfect), we'll apply  
> it.  But I don't want to do something that makes things worse,  
> which is the frequent outcome of seemingly sensible changes when  
> multithreaded code is in the picture.

Isn't that the truth.

> Part of the problem with threads is that you need to set _several_  
> variables (sys.last_{type,value,traceback}).   It is perfectly  
> possible to get a thread-switch after you've set only some of these  
> and not all.  At that point, I have no idea what a debugger like  
> pdb would do.

I think this may not be a huge issue. Note that pdb.pm() (and other  
interactive things that might want access to sys.last_*) will be  
executed from the interpreter's mainloop. So, if the interpreter is  
in the mainloop, by definition the exception handling has finished.  
Though it might have been interrupted several times, the exception  
handler will have had to finish its business before the mainloop  
starts, right?

All that would seem to be necessary is a way to identify whether the  
current thread is the mainloop thread; if so, then the exception  
handlers should attempt to set the sys.last_* values.

So, can the thread structures be annotated with a '_ipython_mainloop  
= True' type attribute, that could be looked up by the exception  
handlers? Or is introspection on the current thread not possible/ 
practical/helpful?

Zach







More information about the IPython-user mailing list