Неявное обращение к вызывающей функции обязательно приведет к бесконечным циклам, ошибкам (если только вы не убедитесь, что все методы, вызывающие ошибку, являются идемпотентными, даже если преждевременно прерваны), путанице и, в любом случае, совершенно непифоничным.То, что вы ищете, это просто обычная обработка ошибок:
def f2():
try:
1/0 # complicated code, potentially raising an error
except ZeroDivisionError: # Or BaseException, if you gotta catch them all
error()
# clean up, restore a consistent state
# go on, no matter whether the error occurred or did not
Если просто повторная попытка помогает, вы просто записываете:
def sometimes_fails():
1 / random.randint(0,1)
def f():
while True:
try:
sometimes_fails()
except ZeroDivisionError:
continue # try again
break # abort
Использование общего имени, например error
дляочень необычное, чрезвычайно сложное (идемпотентное) и поэтому подверженное ошибкам поведение не очень хорошая идея.
Этот ответ вам преподнес On Error Resume Next
.