Christian Gollwitzer wrote: > 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 > >
I've done the same before myself (exit from nested blocks to a containing block using exception), but it does violate the principle "Exceptions should be used for exceptional conditions). -- https://mail.python.org/mailman/listinfo/python-list