Как перехватить исключения из request_future в обратном вызове - PullRequest
0 голосов
/ 19 октября 2018

Я использую request_future прямо сейчас, чтобы сделать остальные вызовы.Я использую callback_func, чтобы сначала разрешить некоторую обработку данных. Итак, в коде sudo что-то вроде этого (реальный код немного сложнее):

def callback(session, resp):
    if not resp.status_code = 200:
        resp.data = { 
             "errorMessage": 'got unexpected error code ' +resp.status_code
        }

    data = formatResult(resp.json())


def sendPropertiesRequest(baseUrl):
    return __session.get(getPropertiesUrl(baseUrl), background_callback=callback)

В моем коде вызова:

for siteName, url in BaseConfigParser.getSites().items():
    requests[siteName] = RestCaller.sendPropertiesRequest(url)

for siteName, request in requests.items():
    responsData = request.result().data
    // do junk with it

Я хотел бы обнаружить любые исключения, сгенерированные в будущем, и перехватить их в моем обратном вызове, возвращая сообщение об ошибке, вместо принудительной проверки на перехват везде, где используется этот метод.

Я не могу показатьсячтобы поймать исключение, используя background_callback, как я хотел.Я попытался вместо использования фонового обратного вызова вместо вызова add_done_callback (обратный вызов) на будущее, которое я создаю в getPropertiesUrl.Однако, хотя я могу обнаруживать исключения в done_callback, я не понял, как вернуть созданный мной объект данных, чтобы он был доступен в моем коде вызова из готового обратного вызова.

Единственный известный мне методчтобы обернуть будущее оболочкой, которая реализует свой собственный метод результатов, который перехватывает исключения, но я чувствую, что должен быть более чистый подход.Как сделать так, чтобы мой код обратного вызова мог обрабатывать исключения, чтобы вызывающий код не обрабатывал его.

...