Как ввести PDB в определенный кадр стека - PullRequest
0 голосов
/ 29 декабря 2018

Я написал функцию для входа в PDB при возникновении исключения (назовем его trace_on_error).Прямо сейчас, когда я вызываю pdb.set_trace() pdb разумно входит в кадр стека trace_on_error, требуя, чтобы мне пришлось вводить команду up, прежде чем я смогу посмотреть на кадр вызывающей функции.

Я пытаюсь заставить trace_on_error не требовать, чтобы пользователи знали, как это реализовано, и поэтому я хотел бы, чтобы pdb входил в кадр стека вызывающих.Когда я искал документацию, я надеялся найти что-то похожее на pdb.set_trace(frame_up=1), но я ничего не нашел.

Пример кода:

def trace_on_error(f, errors):
    try:
        return f()
    except errors as e:
        pdb.set_trace()

Если вы заинтересованы в том, чтобы увидеть полный код вместо минимального фрагмента, пожалуйста, обратитесь сюда: https://github.com/ethomas2/trace/blob/master/trace.py

1 Ответ

0 голосов
/ 01 февраля 2019

Это должно сработать (я проверял, но не уверен, что это работает во всех возможных случаях):

def trace_on_error(f, errors):
    try:
        return f()
    except errors as e:
        import sys
        from pdb import Pdb
        Pdb().set_trace(sys._getframe().f_back)
...