Броски Mypy и ошибка «Отсутствует инструкция возврата», но я не вижу, где мне ее не хватает - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь реализовать функцию повтора в http_requests, но у меня возникают проблемы с «необходимым» оператором возврата, хотя я не могу понять, где это должно быть

def _http_request(method: _HttpMethod, url: str, **kwargs) -> Optional[requests.models.Response]:
    _body: Any = None
    _retries: Any = 3
    if "json" in kwargs:
        _body = kwargs.get("json")
    elif "data" in kwargs:
        _body = kwargs.get("data")
    elif "retries" in kwargs:
        _retries = kwargs.get("retries")
    elif "timeout" in kwargs:
        _timeout = kwargs.get("timeout")

    for _retry in range(1, _retries):
        try:
            logging.debug(f"{method.value} {url} body: {_body}")
            _response = requests.request(method.value, url, **kwargs)
            logging.debug(f"{_response.status_code} body: {_response.text}")
            return _response
        except NewConnectionError:
            logging.error("Failed to establish a new connection: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time.")
            return None
        except requests.exceptions.ConnectionError:
            logging.error("Failed to establish a new connection: [Errno 113] No route to host.")
            return None
        except requests.exceptions.Timeout:
            if _retry <= 3:
                logging.warning(f"Connection to Jira timed out after {_timeout}, trying to connect again({_retry} of {_retries} retries)")
            else:
                logging.error(f"Failed to connect to jira server efter {_retries}")
                return None

1 Ответ

0 голосов
/ 14 февраля 2019

Операторы возврата находятся внутри цикла for, но не после него, что создает несоответствие.

Добавление return None вне (после) цикла for.

Блок if _retry <= 3: также несовместимо с тем, что не имеет оператора return, но return None после того, как цикл может разрешить предупреждение.

...