Kin*_*lan 4 python error-handling google-app-engine design-patterns
我正在使用Python在Google App Engine上开发应用程序.
我有一个可以返回各种输出的处理程序(目前是html和json),我正在基于发送到请求处理程序的无效参数测试系统中的明显错误.
然而,我正在做的事情感觉很脏(见下文):
class FeedHandler(webapp.RequestHandler):
def get(self):
app = self.request.get("id")
name = self.request.get("name")
output_type = self.request.get("output", default_value = "html")
pretty = self.request.get("pretty", default_value = "")
application = model.Application.GetByKey(app)
if application is None:
if output_type == "json":
self.response.out.write(simplejson.dumps({ "errorCode" : "Application not found."}))
self.set_status(404)
return
category = model.FeedCategory.GetByKey(application, name)
if category is None:
if output_type == "json":
self.response.out.write(simplejson.dumps({ "errorCode" : "Category not found."}))
self.set_status(404)
return
Run Code Online (Sandbox Code Playgroud)
我专门处理每个输出类型的情况,并且每个"断言".
我很想知道如何清理它的建议,模式和例子(我知道尝试和维护我正在做的事情将成为一场噩梦).
我正在考虑拥有和提高自定义异常的想法,并有一个装饰器,将自动解决如何显示错误消息 - 我认为这是一个好主意,但我很乐意根据人们如何得到一些反馈和建议过去做过这个.
这里有几种方便的方法.首先是自我.错误(代码).默认情况下,此方法只是设置状态代码并清除输出缓冲区,但您可以覆盖它以根据错误结果输出自定义错误页面.
第二种方法是自我.handle__exception(exception,debug_mode).如果任何get/post/etc方法返回未处理的异常,则此方法由webapp基础结构调用.默认情况下,它调用self.error(500)并记录异常(如果启用了调试模式,则将其打印到输出).您可以覆盖此方法以处理您喜欢的异常.这是一个允许您为各种状态抛出异常的示例:
class StatusCodeException(Exception):
def __init__(self, code):
self.status_code = code
class RedirectException(StatusCodeException):
def __init__(self, location, status=302):
super(RedirectException, self).__init__(status)
self.location = location
class ForbiddenException(StatusCodeException):
def __init__(self):
super(ForbiddenException, self).__init__(403)
class ExtendedHandler(webapp.RequestHandler):
def handle_exception(self, exception, debug_mode):
if isinstance(exception, RedirectException):
self.redirect(exception.location)
else:
self.error(exception.status_code)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2446 次 |
| 最近记录: |