Как получить стек вызовов после исключения в Python? - PullRequest
0 голосов
/ 09 апреля 2020

В приведенном ниже примере я хотел бы знать, какой класс и какая функция вернули ошибку. Я играл с traceback, но я не получил ничего релевантного (None, None, None), [], ...

import builtins

class AssertionError(BaseException):
    def __init__(self, *args, **kwargs):
        print(args, kwargs)
        traceback.print_exc(file=sys.stdout)
        print(sys.exc_info())
        tb = sys.exc_info()[-1]
        stk = traceback.extract_tb(tb, 1)
        print(stk)
        # for func_name in functions_chain:
        #     if func_name.starts_with('test'):
        #         get_function(func_name)._status = 'failure'

        raise builtins.AssertionError

class Foo:
    def run(self):
        self.test()

    def test(self):    
        assert False

Foo().run()

Я хотел бы получить имя функции, вызываемые до ошибки утверждения. Здесь я должен получить ['test', 'run']. Если я найду имя функции, начинающееся с test, я бы хотел пометить его атрибутом, который позже смогу прочитать из экземпляра Foo.

Как я могу поймать, что мне нужно в AssertionError?

В настоящее время я получаю этот вывод:

() {}
NoneType: None
(None, None, None)
[]
...