On 6/4/07, Steven Bethard <steven.bethard at gmail.com> wrote: > 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. 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/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4