Un metodo è diventato troppo grande per il suo bene e ho bisogno di suddividerlo in due metodi separati.
def big_method(dct):
# Initial code
# ...
for i in dct:
# More code
# ...
for j in dct[i]:
# Inner code
# ...
# ...
# and a break
if j == 'something':
break
# Inner code ended here.
Il problema è che il mio primo metodo conterrà un ciclo e il secondo metodo deve contenere un break
:
def first_small(dct, second_method):
# Initial code
# ...
for i in dct:
# More code
# ...
for j in dct[i]:
second_method()
def second_small(j):
# Plenty of code
# ...
# ...
# and a break
if j == 'something':
break
# Inner code ended here.
second_small()
genererebbe un SyntaxError: 'break' outside loop
.
Per risolvere il problema, posso sostituire break
in second_small()
con un'eccezione personalizzata e rendere first_small()
gestire quell'eccezione e interrompere il ciclo quando lo trova:
def first_small(dct, second_method):
# Initial code
# ...
for i in dct:
# More code
# ...
for j in dct[i]:
try:
second_method(j=j)
except MyException:
break
def second_small(j):
# Inner code
# ...
# ...
# and a break
if j == 'something':
raise MyException
# Inner code ended here.
Tuttavia, non sono così sicuro che questo sia il modo più pulito per riuscirci.
Domanda:
Come dovrei dividere un metodo in altri due, in cui il primo metodo conterrà un ciclo e il secondo deve interrompere quel ciclo?