В Tornado Exception инкапсулируется в Будущее, а вызывающая функция async должна дать Будущему распаковать Исключение. Как получить сообщение журнала, чтобы правильно распечатать имя функции и строку, где исключение происходит, если у меня есть длинная цепочка вызовов асинхронных функций?Правильное ведение журнала для исключения в сопрограмме Python3 + Tornado4.3 + собственный модуль ведения журнала
Например, в коде ниже:
FORMAT = '%(asctime)s - %(levelname)s - %(filename)s : %(lineno)s'\
' - %(funcName)20s() - %(message)s\n'
logging.basicConfig(format=FORMAT)
...
@gen.coroutine
def layer_2():
return(yield async_func())
@gen.coroutine
def layer_1():
return(yield layer_2())
@gen.coroutine
def main():
try:
yield layer_1()
except Exception as e:
logging.warning('Error: {}'.format(str(e))
Если есть Исключение возникает в async_func()
сообщение журнала lineno
и funcName
принадлежат main()
, не async_func()
.
Есть ли какие-либо решения, кроме try
и catch
каждые yield
заявление? Благодаря!
Редактировать 1: Я понял, что ответ на мой вопрос может не иметь ничего общего с Торнадо, но я просто включаю его здесь, потому что это мое дело.
А это очень полезно! Спасибо! Я думаю, что это второй вопрос, который вы мне помогли! –