В моей программе у меня есть функция, которая обрабатывает вызовы requests
и либо возвращает обработанный вызов, либо вызывает исключение. Эта функция используется многими другими функциями, однако проблема, с которой я сталкиваюсь, заключается в том, как обрабатывать исключение, которое может быть поднято. В настоящее время устанавливается, как так (упрощенно):Python: Есть ли способ заставить родительскую функцию вернуться?
def getFromAPI(url):
# create variable headers
r = requests.get(url, headers=headers)
if r.status_code == 404:
raise Exception("Error raised")
else:
#process data
return data
def functionone():
...
try:
data = getFromAPI(url)
except Exception as e:
return handleException(e)
#handles problems, returns exception-formatted data
...
# formatting data specific to functionone
return formatted_data
def functiontwo():
...
try:
data = getFromAPI(url)
except Exception as e:
return handleException(e)
#handles problems, returns exception-formatted data
...
# formatting data specific to functiontwo
return formatted_data
def functionthree():
...
#similar to functionone and functiontwo
Хотя я не думаю, что это не так, сами по себе, так как getFromAPI
используется во многих функциях, имея постоянно повторять попытку кроме выписок чувствует себя неправильно , как если бы он выполнялся в функции getFromAPI
. Однако, поскольку другие functionone
до function_n
все возвращают разные вещи в зависимости от того, была ли поднята ошибка, я не вижу способа справиться с этим из-за getFromAPI
, если только нет способа для getFromAPI
, чтобы заставить родительскую функцию возвращать, без явно вызывающий return в родительской функции.
Если это не так, есть ли лучшая реализация того, что я пытаюсь сделать, или я обречен повторять попытку за исключением утверждений?
Позвольте ему громко выйти и поймать его дальше ... не справляйтесь с проблемой в каждой функции –
К сожалению, у меня нет контроля над функциями дальше. – echolocation
Под «далее вверх» подразумеваются вызывающие функции 'functionone'..'functionthree'? Или прямыми абонентами 'getFromAPI'? – kdopen