For example, can this code be rewritten without break
(and without continue
or return
)?
import logging
for i, x in en
You could use a boolean value to check if you are done. It will still iterate the rest of the loop but not execute the code. When it is done it will continue on its way without a break. Example Pseudo code below.
doneLogging = False
for i, x in enumerate(x):
if not doneLogging:
logging.info("Processing `x` n.%s...", i)
y = do_something(x)
if y == A:
logging.info("Doing something else...")
do_something_else(x)
elif y == B:
logging.info("Done.")
doneLogging = True
You could always use a function and return from it:
import logging
def func():
for i, x in enumerate(x):
logging.info("Processing `x` n.%s...", i)
y = do_something(x)
if y == A:
logging.info("Doing something else...")
do_something_else(x)
elif y == B:
logging.info("Done.")
return # Exit the function and stop the loop in the process.
func()
Although using break
is more elegant in my opinion because it makes your intent clearer.
You can also use sys.exit()
import logging
import sys
for i, x in enumerate(x):
logging.info("Processing `x` n.%s...", i)
y = do_something(x)
if y == A:
logging.info("Doing something else...")
do_something_else(x)
elif y == B:
logging.info("Done.")
sys.exit(0)
The break
and continue
keywords only have meaning inside a loop, elsewhere they are an error.
for grooble in spastic():
if hasattr(grooble, '_done_'):
# no need for futher processing of this element
continue
elif grooble is TheWinner:
# we have a winner! we're done!
break
else:
# process this grooble's moves
...
Anyone who says break
and continue
should not be used is not teaching good Python.