我正在调用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中),应该由调用函数来处理?
我看到的大多数开源项目都无法处理此异常。
答案 0 :(得分:0)
我在this answer中分享观点。因此,请尽快捕获该异常,然后根据需要将其重新抛出到下一层。
通过在代码库中的实践和经验,可以很容易地判断何时向错误添加其他上下文,以及实际上最适合最终处理错误的位置。
抓住→重新投掷
执行此操作,您可以在其中有用地添加更多信息,从而使开发人员不必遍历所有层来了解问题。
抓住→处理
执行此操作,您可以最终决定通过软件执行的适当但不同的执行流程。
捕获→错误返回