Python龙卷风通过finish()停止执行

Ank*_*pta 1 python runtime-error 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)
Run Code Online (Sandbox Code Playgroud)

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))
Run Code Online (Sandbox Code Playgroud)

因此,如果result1为空,则它应该完成API的执行并返回。但是我收到这个错误RuntimeError: Cannot write() after finish()

我应该如何停止执行。

A. *_*vis 6

您不需要“ 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)
Run Code Online (Sandbox Code Playgroud)

另一个选择是缩进最后一行,使其保留在“ 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
Run Code Online (Sandbox Code Playgroud)