The rap against "while True:" loops

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Wed Oct 14 19:11:04 EDT 2009


On Wed, 14 Oct 2009 20:17:40 +0000, Jorgen Grahn wrote:

>> But we have exceptions. And I know somebody, in other languages, thinks
>> it's a Best Practice to avoid using exceptions for flow control.
> 
> A lot of C++ programmers think so, and Stroustrup himself says
> "exceptions are for exceptional things" or something to that effect. Is
> that what you're thinking of?
> 
> Thankfully, Stroustrup doesn't use the dreaded phrase "Best Practice",
> which as far as I can tell is designed to shut down rational thought in
> the audience.
> 
>> Thankfully, python programmers are less dogmatic, and use whatever
>> makes sense to use. I hope.
> 
> Calling it "dogmatic" is unfair.  C++ is very different from Python, and
> has a different implementation of exceptions. You also tend to use the
> language to solve a different set of problems.
> 
> That said, I still don't fully understand the rationale behind that
> advice or rule ... so I'm willing to break it, and sometimes I do.

Setting up a try...except block is cheap in Python. According to my 
tests, the overhead is little more than that of a single pass statement.

But actually raising and catching the exception is not cheap. If you use 
a lot of exceptions for flow control, performance will probably suffer.

In C++, exceptions are expensive, whether you catch one or not.

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.




-- 
Steven



More information about the Python-list mailing list