调用外部api时处理异常

时间:2018-11-12 12:50:58

标签: python rest django-rest-framework

我正在调用Udemy外部api来构建用于实验目的的简单REST服务。

https://www.udemy.com/developers/affiliate/

这是我的get_all()课程方法。

class Courses(object):
    """
    Handles all requests related to courses.
    ie; gets the courses-list, courses-detail, coursesreviews-list
    """

    def __init__(self, api):
        self.api = api
        logger.debug("courses initialized")

    def get_all(self):
        page = 1
        per_page = 20

        while True:
            res = self._get_courses(page, per_page)
            if not res['results']:
                break

            try:
                for one in res['results']:
                    yield one
            except Exception as e: -->>>handling exception
                print(e)
            break

        page += 1

    def _get_courses_detail(self, page, per_page):
        resource = "courses"
        params = {'page': page, 'per_page': per_page,
#                   'fields[course]': '@all'
                  }

        res = self.api.get(resource, params)
        return res

现在,假设在api的返回数据中可能存在一些错误,处理异常(在get_all()方法中)是否合理?

还是这里不需要处理异常(在get_all中),应该由调用函数来处理?

我看到的大多数开源项目都无法处理此异常。

1 个答案:

答案 0 :(得分:0)

我在this answer中分享观点。因此,请尽快捕获该异常,然后根据需要将其重新抛出到下一层。

  

通过在代码库中的实践和经验,可以很容易地判断何时向错误添加其他上下文,以及实际上最适合最终处理错误的位置。

     

抓住→重新投掷

     

执行此操作,您可以在其中有用地添加更多信息,从而使开发人员不必遍历所有层来了解问题。

     

抓住→处理

     

执行此操作,您可以最终决定通过软件执行的适当但不同的执行流程。

     

捕获→错误返回