Я относительно новичок в торнадо, и я пытаюсь остановить выполнение метода, если условие прошло, в противном случае оно должно перейти к следующей строке кода (аналогично возврату)Python торнадо остановить выполнение с финишем()
Это часть моего кода, где я застрял,
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, и RET урна. Но я получаю эту ошибку RuntimeError: Cannot write() after finish()
Как остановить выполнение.
Как только вы назовёте 'finish()' обработка запроса завершена, и будут освобождены ресурсы (например, сетевое соединение). Таким образом, если вы вызываете какие-либо методы 'write' после' finish', ему негде записывать данные - поэтому он вызывает «RuntimeError». Обратите внимание, что 'finish()' завершает запрос, а не сопрограмму coroutine, для завершения сопрограммы, в которой вам нужно либо использовать 'return' (без каких-либо аргументов, как Python 2), либо' raise gen.Return (None) '. – Nikita