cari

Rumah  >  Soal Jawab  >  teks badan

python - tonado raise gen.Return 错误

最近在使用 Tornado,用到 gen.coroutine 和 yield 配合,但是出了些问题,一直不明白!

代码:

class BaseHandler(tornado.web.RequestHandler):
    @gen.coroutine
    def args_kwargs(self,pro):
        try:
            kwargs = self.get_argument("data",None)
            if kwargs:
                code="-10000"
                raise gen.Return(code)
        except:
            print traceback.format_exc()

class EventAPIHandler(BaseHandler):
    @gen.coroutine
    def post(self):
        try:
            code = yield self.args_kwargs("event")
            if code:
                self.write(re_code[code])
                self.finish()
        except Exception,e:
            print traceback.format_exc()

错误为:

Traceback (most recent call last):
  File "server.py", line 124, in args_kwargs
    raise gen.Return(code)
Return

不能返回数据,请问有大神知道原因吗?请指教,非常感谢!

PHP中文网PHP中文网2888 hari yang lalu333

membalas semua(2)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:32:03

    Asal, sila alih keluar cuba kecuali jika cuba kecuali dinaikkan, ia akan ditangkap kepada yang berikut, ia sepatutnya berfungsi

    class BaseHandler(tornado.web.RequestHandler):
        @gen.coroutine
        def args_kwargs(self,pro):
            kwargs = self.get_argument("data", None)
            if kwargs:
                code = "-10000"
                raise gen.Return(code)
            else:
                raise gen.Return("xxx")
            
    class EventAPIHandler(BaseHandler):
        @gen.coroutine
        def post(self):
            try:
                code = yield self.args_kwargs("event")
                if code:
                    self.write(re_code[code])
                    self.finish()
            except Exception,e:
                err = traceback.format_exc()
                self.write(err)
                self.finish() 
               

    balas
    0
  • 阿神

    阿神2017-04-17 17:32:03

    Dalam Python2.x, penjana tidak boleh terus return 值, jadi Tornado membungkus nilai dalam pengecualian khas dan mengembalikannya gen.Return, jadi cubaan anda..e xcept akan menangkap pengecualian ini dan melaporkan ralat, jadi tukar kod BaseHandler.args_kwargs, sila rujuk:
    BTW Nampaknya tiada hasil dalam args_kwargs, nampaknya ia hanyalah parameter di sana tak perlu guna gen.coroutine kan?

    class BaseHandler(tornado.web.RequestHandler):
        @gen.coroutine
        def args_kwargs(self,pro):
            try:
                kwargs = self.get_argument("data",None)
            except Exception as e:
                print e
            else:
                code = "-10000" if kwargs else "0000000"
                raise gen.Return(code)
    
    
    class EventAPIHandler(BaseHandler):
        @gen.coroutine
        def post(self):
            try:
                code = yield self.args_kwargs("event")
                if code:
                    self.write(re_code[code])
                    self.finish()    # gen.coroutine会自动finish(),如果只是想结束连接,可把这一行替换为 return
            except Exception,e:
                print traceback.format_exc()

    balas
    0
  • Batalbalas