Python API客户端在运行失败时重新运行函数

Python API客户端在运行失败时重新运行函数,python,python-requests,Python,Python Requests,Python请求API客户端有一个函数,如果运行失败,需要重新执行该函数 Kitten(BaseClient): def create(self, **params): uri = self.BASE_URL data = dict(**(params or {})) r = self.client.post(uri, data=json.dumps(data)) return r 如果与 api = Kitten(

Python请求API客户端有一个函数,如果运行失败,需要重新执行该函数

Kitten(BaseClient):

    def create(self, **params):
        uri = self.BASE_URL
        data = dict(**(params or {}))
        r = self.client.post(uri, data=json.dumps(data))

        return r 
如果与

api = Kitten()
data = {"email": "bill@dow.com", "currency": "USD", "country": "US"  } 

r = api.create(**data)
问题是,无论何时运行它,它第一次总是以GET的形式返回请求,即使它发布了。第一次发送post时,它返回GET条目列表

后面的请求(第二个和更高版本)api.create(**data)返回按原样创建的新条目

get和post有一个状态代码

# GET
r.status_code == 200

# POST
r.status_code == 201

当状态代码为200时,有什么更好的Python方法可以重新执行,直到返回一个有效的201。

如果您确定第二个post将始终返回您的期望值,您可以使用三元运算符再次执行检查:

Kitten(BaseClient):

    def create(self, **params):
        uri = self.BASE_URL
        data = dict(**(params or {}))
        r = self._get_response(uri, data)

        return r if r.status_code == 201 else self._get_response(uri, data)

    def _get_response(uri, data):
        return self.client.post(uri, data=json.dumps(data)

否则,您可以将其放入while循环中,条件是状态代码==201。

如果您确定第二个post将始终返回您的期望值,则可以使用三元运算符再次执行检查:

Kitten(BaseClient):

    def create(self, **params):
        uri = self.BASE_URL
        data = dict(**(params or {}))
        r = self._get_response(uri, data)

        return r if r.status_code == 201 else self._get_response(uri, data)

    def _get_response(uri, data):
        return self.client.post(uri, data=json.dumps(data)

否则,您可以将其放在while循环中,条件是状态代码==201。

暂时有效,将记住while循环用于later暂时有效,将记住while循环用于稍后