osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

clever exit of nested loops


Am 26.09.18 um 12:28 schrieb Bart:
> On 26/09/2018 10:10, Peter Otten wrote:
>> ???? class Break(Exception):
>> ???????? pass
>>
>> ???? try:
>> ???????? for i in range(10):
>> ???????????? print(f'i: {i}')
>> ???????????? for j in range(10):
>> ???????????????? print(f'\tj: {j}')
>> ???????????????? for k in range(10):
>> ???????????????????? print(f'\t\tk: {k}')
>>
>> ???????????????????? if condition(i, j, k):
>> ???????????????????????? raise Break
>> ???? except Break:
>> ???????? pass
>>
> 
> For all such 'solutions', the words 'sledgehammer' and 'nut' spring to 
> mind.
> 
> Remember the requirement is very simple, to 'break out of a nested loop' 
> (and usually this will be to break out of the outermost loop). What 
> you're looking is a statement which is a minor variation on 'break'. 

Which is exactly what it does. "raise Break" is a minor variation on 
"break".

> Not 
> to have to exercise your imagination in devising the most convoluted 
> code possible.

To the contrary, I do think this solution looks not "convoluted" but 
rather clear. Also, in Python some other "exceptions" are used for a 
similar purpose - for example "StopIteration" to signal that an iterator 
is exhausted. One might consider to call these "signals" instead of 
"exceptions", because there is nothing exceptional, apart from the 
control flow.

	Christian