The rap against "while True:" loops

Terry Reedy tjreedy at udel.edu
Sat Oct 17 18:18:40 EDT 2009


Steven D'Aprano wrote:
> On Fri, 16 Oct 2009 18:30:50 +0100, Tim Rowe wrote:
> 
>>> Also, using exceptions this way is a structured form of GOTO -- it's
>>> easy to abuse and turn it into spaghetti code. Actually, not that easy
>>> to abuse, because you can't jump back into the try block. It's more
>>> like a multi-level break outside of a loop than a general GOTO.
>> I don't think it's *only* the performance thing, it's also clarity. The
>> understood meaning of throwing an exception is to say "something
>> happened that shouldn't have". If one uses it when something has
>> happened that *should* have, because it happens to have the right
>> behaviour (even if the overhead doesn't matter), then one is
>> misrepresenting the program logic.
> 
> No, you have a fundamental misunderstanding. They're called exceptions, 
> not errors, because they represent exceptional cases. Often errors are 
> exceptional cases, but they're not the only sort of exceptional case.
> 
> Python uses exceptions for flow control: e.g. for-loops swallow 
> StopIteration or IndexError to indicate the end of the loop. In the 
> context of a for-loop, StopIteration or IndexError doesn't represent an 
> error. It doesn't represent an unexpected case. It represents an 
> expected, but exceptional (special) case: we expect that most sequences 
> are finite, and it is normal to eventually reach the end of the sequence, 
> after which the loop must change behaviour.
> 
> Similarly, it's hardly an *error* for [1, 2, 3].index(5) to fail -- who 
> is to say that the list is supposed to have 5 in it? ValueError (a 
> slightly misleading name in this situation) is used to indicate an 
> exceptional, but not unexpected, occurrence.
> 
> Likewise, KeyboardInterrupt is used to allow the user to halt processing; 
> SystemExit is used to shut down the Python virtual machine; and warnings 
> are implemented using exceptions. There may be others among the built-ins 
> and standard library, but even if there aren't, there is plenty of 
> precedence for us to do the same.

Nicely put. Programmers are exceptional people, but not erroneous, in 
spite of nerd stereotypes ;-).

tjr





More information about the Python-list mailing list