On 6/4/07, Steven Bethard <[EMAIL PROTECTED]> wrote:
> On 6/4/07, BJörn Lindqvist <[EMAIL PROTECTED]> 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.

Anything that causes an "assert" to fail is technically using
"undefined" behavior. I am in favor of changing this case to
RuntimeError, which is the error Python usually uses for state
problems.

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to