Получить последнее исключение в pdb

Есть ли способ изучить последнее исключение, когда в pdb / перед вводом pdb? (Использование python 2.7.5).

Сразу (да, я не вхожу ни в какие другие команды) после исключения из моего кода, я делаю sys.exc_info() ; это приводит к (None, None, None) . На этом этапе я могу сделать pdb.pm() , а pdb начинается с того момента, когда исключение возбуждается.

Я хотел бы иметь возможность изучить этот объект исключения (он не сохраняется в переменной перед тем, как быть поднятым).

Нет ничего очевидного в http://docs.python.org/2/library/pdb.html или http://docs.python.org/2/library/sys.html

Изменить: я знаю о set_trace . Я хотел бы изучить исключение, прежде чем изменять код.

  • Как выполнить цикл for в пакетах?
  • Изменение элемента в одном списке изменяет несколько списков ..?
  • Как перечислить все поля класса в Python (и без методов)?
  • Сделать utf8 доступным для чтения в файле
  • Есть ли способ сделать collection.Counter (Python2.7) известно, что его список ввода отсортирован?
  • Неверный список, возвращаемый в python
  • Объединить элементы списков, если какое-то условие
  • Создание 3D-массива с использованием Python
  • 2 Solutions collect form web for “Получить последнее исключение в pdb”

    Вы можете использовать sys.last_value :

     >>> no_such_var Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'no_such_var' is not defined >>> import sys >>> sys.last_value NameError("name 'no_such_var' is not defined",) >>> sys.last_value.args ("name 'no_such_var' is not defined",) 

     >>> no_such_var Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'no_such_var' is not defined >>> import pdb, sys >>> pdb.set_trace() --Return-- > <stdin>(1)<module>()->None (Pdb) sys.last_value NameError("name 'no_such_var' is not defined",) 

    Это то, что вы ищите?

     import pdb try: 1/0 except Exception as err: pdb.set_trace() 

     % test.py --Return-- > /home/unutbu/pybin/test.py(8)<module>()->None -> pdb.set_trace() (Pdb) err ZeroDivisionError('integer division or modulo by zero',) (Pdb) quit 

    Если вы не хотите изменять код, в котором возникает исключение, вместо этого вы можете переопределить sys.excepthook :

     import pdb import sys def excepthook(type, value, traceback): pdb.set_trace() sys.excepthook = excepthook 1/0 

     % test.py --Return-- > /home/unutbu/pybin/test.py(7)excepthook()->None -> pdb.set_trace() (Pdb) type <type 'exceptions.ZeroDivisionError'> (Pdb) value ZeroDivisionError('integer division or modulo by zero',) (Pdb) traceback <traceback object at 0xb774f52c> (Pdb) 
    Python - лучший язык программирования в мире.