[Python-Dev] What exception should Thread.start() raise?

Steven Bethard steven.bethard at gmail.com
Mon Jun 4 21:50:39 CEST 2007


On 6/4/07, BJörn Lindqvist <bjourne at gmail.com> wrote:
> The threading module contains buggy code:
>
> class Thread(_Verbose):
>     ...
>     def start(self):
>         assert self.__initialized, "Thread.__init__() not called"
>         assert not self.__started, "thread already started"
>     ...
>
> If you run such code with python -O, weird stuff may happen when you
> call mythread.start() multiple times. -O removes assert statements so
> the code won't fail with an AssertionError which would be expected.
>
> So what real exception should Thread.start() raise? I have suggested
> adding an IllegalStateError modelled after java's
> IllegalStateException, but that idea was rejected. So what exception
> should be raised here, is it a RuntimeError?

If you want to be fully backwards compatible, you could just write this like::

    def start(self):
        if not self.__initialized:
            raise AssertionError("Thread.__init__() not called")
        if self.__started:
            raise AssertionError("thread already started")

But I doubt anyone is actually catching the AssertionError, so
changing the error type would probably be okay.

STeVe
-- 
I'm not *in*-sane. Indeed, I am so far *out* of sane that you appear a
tiny blip on the distant coast of sanity.
        --- Bucky Katt, Get Fuzzy


More information about the Python-Dev mailing list