pdb postmortem debug: переход к повышению исключения после выхода в обработчике исключений - PullRequest
1 голос
/ 05 января 2020

Мне просто любопытно, существует ли команда для отладчика ipdb на возврат к источнику возбужденного исключения.

Рассмотрим следующую небольшую программу.

import sys
import random

def somefun():
    someval = random.random()
    raise Exception()

def run():
    try:
        somefun()
    except Exception:
        sys.exit(10)

При запуске функции run из командной строки (с помощью консоли i python) она завершается с 10, как и должно быть. Есть ли способ запустить посмертный отладчик (pdb.pm()) и получить значение someval, прыгнув назад?

1 Ответ

1 голос
/ 06 января 2020
except Exception:
    sys.exit(10)

Есть ли способ ... получить значение someval, отскочив назад?

Нет. Это прошло. Ваш обработчик ошибок проглотил исключение и сделал что-то, что python считает "нормальным", хотя родительский процесс будет интерпретировать ненулевой статус выхода как ошибку.

При возникновении фатальной python ошибки при ' в контексте отладки. Вот один из способов:

except Exception:
    if debug:
        raise
    else:
        sys.exit(10)

Затем вызов как $ python -m pdb some_script.py позволит вам проверить обратную трассировку и значение с помощью:

(Pdb) bt

и

(Pdb) p someval
...