On Sun, Mar 15, 2009, Michael Foord wrote: > Aahz wrote: >> On Sun, Mar 15, 2009, Michael Foord wrote: >>> >>> Note that using exceptions for control flow can be bad for other >>> implementations of Python. For example exceptions on the .NET >>> framework are very expensive. (Although there are workarounds such >>> as not really raising the exception - but they're ugly). >>> >>> Isn't it better practise for exceptions to be used for exceptional >>> circumstances rather than for control flow? >> >> It seems to me that we as a development community already made a decision >> when we switched to StopIteration as the primary mechanism for halting >> ``for`` loops. (Not that it was really a new decision because parts of >> the Python community have always advocated using exceptions for control >> flow, but the ``for`` loop enshrines it.) I doubt that using exceptions >> for control flow in ``with`` blocks will cause anywhere near so much a >> performance degradation. > > Well, StopIteration is still an implementation detail that only > occasionally bleeds through to actual programming. It says nothing > about whether using exceptions for non-exceptional circumstances > (control flow) is good practise. Personally I think it makes the > intent of code less easy to understand - in effect the exceptions > *are* being used as a goto.
Let me know how you'd rewrite this more clearly without a control-flow exception: try: for field in curr_fields: for item in record[field]: item = item.lower() for filter in excludes: if match(item, filter): raise Excluded except Excluded: continue This is pretty much the canonical example showing why control-flow exceptions are a Good Thing. They're a *structured* goto. -- Aahz (a...@pythoncraft.com) <*> http://www.pythoncraft.com/ Adopt A Process -- stop killing all your children! _______________________________________________ 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