wxpython thread exception crash

david david at nospam.spam
Tue Aug 21 00:05:43 EDT 2007


What am I doing wrong?
I'm trying to capture stdErr in a multi-threaded program.

This code crashes wxPython with
/Py Assertion Error: C++ assertion "m_count=-1 || m_count=-2" failed/

What I'm trying to do is redirect stderr and stdout to a wxPython text 
control.
In an ideal world, when the worker thread crashes, I should get a stderr 
message, with no effect on the main thread.

In an alternate world, I should get an asynchronous exception in the 
main thread when there is an unhandled exception in the worker thread.

In the sample below, the program crashes on the following print statement.

Oddly enough, I do catch the unhandled worker exception in the main 
thread IF THE WORKER THREAD HAS NO INIT PARAMETER. Note: the init 
parameter is the only subtle thing in the code.

Since this is a crash, the exact behaviour will depend on your 
environment. You may have difficulty seeing stdErr in some environments.

Python 2.5, wxPython 2.7.2.0, Windows XP.
(david)

--------
import wx
import sys
import threading

class ExceptionThread(threading.Thread):
     def __init__(self,initvar):
         threading.Thread.__init__(self);

     def run(self):
         raise "ET run"


class RedirectText:
     def __init__(self,aWxTextCtrl):
         self.out=aWxTextCtrl

     def write(self,string):
         self.out.WriteText(string)

     def flush(self):
         pass

class Frame(wx.Frame):
     def __init__(self, image=None, parent=None):

         wx.Frame.__init__(self, parent)
         self.text = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_RICH2)

     #---- redirection window ----
         redir=RedirectText(self.text)
         sys.stdout=redir
         sys.stderr=redir


class App(wx.App):
     def OnInit(self):
         self.frame=Frame()
         self.frame.Show()
         self.Thread=ExceptionThread(1)
         self.Thread.start();
         return True


app = App()
print 'trigger print failure'
app.MainLoop()





More information about the Python-list mailing list