On Tue, Jun 28, 2016 at 6:49 PM, Lawrence D’Oliveiro
<lawrenced...@gmail.com> wrote:
> On Tuesday, June 28, 2016 at 7:26:30 PM UTC+12, Chris Angelico wrote:
>> Why not:
>>
>> if (error) goto cleanup;
>> ...
>> cleanup:
>> do_cleanup;
>
> They all fall into that same trap. Doesn’t scale. Try one with allocation 
> inside a loop, e.g. lines 488 onwards.

How is that different? You can use a goto inside a for loop just fine.
(You can even, if you are absolutely insane and begging to be murdered
by the future maintainer, use a goto outside a for loop targeting a
label inside. See for example Duff's Device, although that's a switch
rather than an actual goto.) You have a loop, and inside that loop,
the exact same error handling pattern; so it should be possible to
perform the exact same transformation, albeit with a differently-named
local cleanup label.

So, yes. It doesn't scale, if by "scale" you mean "so many separate
local instances of error handling that you lose track of your cleanup
labels". But you should be able to keep half a dozen labels in your
head (if they're named appropriately), and if you have that many local
error handlers, you probably want something to be refactored.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to