Python уже имеет очень хорошую конструкцию для этого, и он не использует continue
:
for i in range(10):
try:
r = 1.0 / (i % 2)
except Exception, e:
print(e)
else:
print(r)
Я бы не стал вкладывать больше, чем это, иначе ваш код скоро появитсястановится очень уродливым.
В вашем случае я бы, вероятно, сделал что-то более похожее на это, так как гораздо проще выполнить модульное тестирование отдельных функций, а flat лучше, чем вложенные :
#!/usr/bin/env python
def something_that_may_raise(i):
return 1.0 / (i % 2)
def handle(e):
print("Exception: " + str(e))
def do_something_with(result):
print("No exception: " + str(result))
def wrap_process(i):
try:
result = something_that_may_raise(i)
except ZeroDivisionError, e:
handle(e)
except OverflowError, e:
handle(e) # Realistically, this will be a different handler...
else:
do_something_with(result)
for i in range(10):
wrap_process(i)
Не забывайте всегда поймать определенные исключения .Если вы не ожидали выброса определенного исключения, вероятно, небезопасно продолжать цикл обработки.
Редактировать следующие комментарии:
Если вы действительно нене хочу обрабатывать исключения, которые я все еще считаю плохой идеей, а затем перехватывать все исключения (except:
) и вместо handle(e)
просто pass
.В этот момент wrap_process()
закончится, пропуская else:
-блок, где выполняется настоящая работа, и вы перейдете к следующей итерации своего for
-цикла.
Помните, Ошибки никогда не должны проходить бесшумно .