公司正在启动对外供应数据的业务,是两个高手负责, 架构方面看起来很是浏览,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(“”)

谢谢分享