python-抑制第三方服务不可用时引发异常的最佳方法?
作者:互联网
我编写了一个Django应用程序,该应用程序通过Python包装器与第三方API(Disqus,尽管此细节并不重要)进行交互.当服务不可用时,Python包装器将引发异常.
应用程序处理此类异常的最佳方法是抑制它们,以便仍可以向用户显示页面的其余内容.以下工作正常.
try:
somemodule.method_that_may_raise_exception(args)
except somemodule.APIError:
pass
某些视图包含多个此类调用.是否将每个调用都包装在try / except中,以抑制可能的异常的最佳方法?
解决方法:
从视图进行API调用不是一个好主意.你或许应该创建另一个模块,完成该工作.
即.当我提出的Facebook应用程序创建publish.py文件来存储所有“发布到实况流”的电话.该模块中的函数根据何时调用而命名.即:
# publish.py
def authorise_application(user):
# API call "User joined app."
def post_anwser(anwser):
# API call "User posted anwser to quiz".
然后你的意见非常干净:
# views.py
def post_anwser(request):
...
if form.is_valid():
form.save()
publish.post_anwser(form.instance)
当你有你的代码组织这样,您可以创建忽略例外装饰:
# publish.py
def ignore_api_error(fun):
def res(*args, **kwargs):
try:
return fun(*args, **kwargs):
except someservice.ApiError:
return None
return res
@ignore_api_error
def authorised_application(user):
# API call "User joined app."
@ignore_api_error
def posted_anwser(user, anwser):
# API call "User posted anwser to quiz".
你还可以创建功能,默认情况下没有被“忽略”,并添加忽略视图代码:
# publish.py
def some_function(user, message):
pass
# views.py
def my_view():
...
publish.ignore_api_error(publish.some_function)(user, message)
...
标签:exception-handling,python,django 来源: https://codeday.me/bug/20191209/2096728.html