Skip to main content
 首页 » 编程设计

Python tornado 使用 finish() 停止执行

2025年05月04日13mq0036

我对 tornado 比较陌生,我试图在条件通过时停止执行方法,否则它应该继续执行下一行代码(类似于 return)

这是我卡住的代码部分,

class PostMatchHandler(BaseRequestHandler): 
    result1 = "some sql query".execute() 
    if not result1: 
        response.update({'info': 'Levels Completed', 'status': settings.STATUS_200}) 
        self.write(response) 
        self.finish() 
 
    else: 
        result1 = result1[0] 
        do_something() 
    self.write(response) 

BaseRequestHandler 是:

class BaseRequestHandler(tornado.web.RequestHandler): 
    """ 
    Base Class for all the future classes 
    Activities like logging should be done in this class. 
    Allow cors request in this class 
    """ 
 
    def set_default_headers(self): 
        print "setting headers!!!" 
 
    def write_error(self, status_code, **kwargs): 
        response = {} 
        handle_error_messages.. 
        self.write(response) 
 
    @staticmethod 
    def extract_psycopg2_integrity_error(error): 
        return error.message.split("Key")[1].replace("(", "").replace(")", "").split(".")[0].replace("=", " ") 
 
    def prepare(self): 
        logging.debug( 
            "[info] Class {} via {} with body {}".format(self.__class__.__name__, self.request.uri, self.request.body)) 

所以,这里如果 result1 为空,那么它应该完成 API 的执行并返回。但我收到此错误 RuntimeError: Cannot write() after finish()

如何停止执行。

请您参考如下方法:

你不需要“self.finish”,它完成了 Tornado 的响应写入,但它不会停止你的函数的执行。要停止执行函数,请添加 return 语句:

def get(self) 
    result1 = "some sql query".execute() 
    if not result1: 
        response.update({'info': 'Levels Completed', 'status': settings.STATUS_200}) 
        self.write(response) 
        return  # <-- here 
    else: 
        result1 = result1[0] 
        do_something() 
    self.write(response) 

另一种选择是缩进最后一行,使其保留在“else”子句中:

def get(self): 
    result1 = "some sql query".execute() 
    if not result1: 
        response.update({'info': 'Levels Completed', 'status': settings.STATUS_200}) 
        self.write(response)     
    else: 
        result1 = result1[0] 
        do_something() 
        self.write(response)  # indented 4 more spaces