公司正在启动对外供应数据的业务,是两个高手负责, 架构方面看起来很是浏览,nginx lua tornado的组合,识别一些自然语法,由ast语法树来解析构建规则。 遇到一个规范的问题,不是所有的第三方的调用是合法的,这里说的合法更多的是符不符合特定语法的规则,这里语法是dsl结构的, 请求的信息是放在request body体的。
正如刚才所说的那样,我们将来会开放不少对外的、各种各样的接口,那么如何更加方便的返回异常的状态,换句话说,怎么让代码优美起来。 我们这里可以用装饰器, 装饰器的用法其实没啥. 我以前写过一篇装饰器做tornado登陆验证的文章,这个代码其实和今天要讲解的异常处理是一个道理。 回到正题,今我这里更多阐述下tornado利用装饰器做异常的处理。 也不罗嗦了,直接贴我临时写的调试代码…. 大家可以直接跑进行测试。
文章经常被爬,这里标注下文章的原文连接
#coding:utf-8 import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web import time import os from tornado import gen from tornado.concurrent import run_on_executor from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) def exe(func): def exe_f(self,*args,**kwargs): print 'start .....' try: func(self,*args,**kwargs) print 'nima %s'%res except Exception,e: print "问题是",e self.write('ok') else: print 'ok' print 'end ......' return return exe_f class IndexHandler(tornado.web.RequestHandler): @exe def get(self): print "begin" self.write('ok') print aa self.finish() if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[(r"/sleep", IndexHandler)]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
恩, 会发现我的代码很简单, 装饰器本来就简单, 我这里写了一个对于异常处理的函数, 然后又改成装饰器的用法。 这里需要注意的是,装饰器的继承参数里要涵盖self这个对象的。 不然你没法 self.write(“”)
谢谢分享