¿Existe un goto
o algún equivalente en Python para poder saltar a una línea específica de código?
Python le ofrece la posibilidad de hacer algunas de las cosas que podría hacer con un goto utilizando funciones de primera clase. Por ejemplo:
void somefunc(int a)
{
if (a == 1)
goto label1;
if (a == 2)
goto label2;
label1:
...
label2:
...
}
Se podría hacer en python así:
def func1():
...
def func2():
...
funcmap = {1 : func1, 2 : func2}
def somefunc(a):
funcmap[a]() #Ugly! But it works.
De acuerdo, esa no es la mejor manera de sustituir el goto. Pero sin saber exactamente lo que estás tratando de hacer con el goto, es difícil dar un consejo específico.
@ascobol:
Tu mejor opción es encerrarlo en una función o usar una excepción. Para la función:
def loopfunc():
while 1:
while 1:
if condition:
return
Para la excepción:
try:
while 1:
while 1:
raise BreakoutException #Not a real exception, invent your own
except BreakoutException:
pass
Usar excepciones para hacer cosas como esta puede resultar un poco incómodo si vienes de otro lenguaje de programación. Pero yo diría que si no te gusta usar excepciones, Python no es el lenguaje para ti. :-)
Para responder a la pregunta de @ascobol
's utilizando la sugerencia de @bobince
's de los comentarios:
for i in range(5000):
for j in range(3000):
if should_terminate_the_loop:
break
else:
continue # no break encountered
break
La sangría del bloque else
es correcta. El código utiliza la oscura sintaxis de Python else
después de un bucle. Ver ¿Por qué python utiliza 'else' después de los bucles for y while?