'how to use the post_mortem method of pdb?

I am trying to understand how to use the pdb.post_mortem() method.

for this given file

# expdb.py
import pdb
import trace

def hello():
  a = 6 * 9
  b = 7 ** 2
  c = a * b
  d = 4 / 0
  print(c)

tracer = trace.Trace()

Command prompt

'''
# first Try

λ python -i expdb.py
>>> pdb.post_mortem()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Anaconda3\lib\pdb.py", line 1590, in post_mortem
    raise ValueError("A valid traceback must be passed if no "
ValueError: A valid traceback must be passed if no exception is being handled
'''

'''
# Second Try

λ python -i expdb.py
>>> pdb.post_mortem(traceback=tracer.run('hello()') )
 --- modulename: trace, funcname: _unsettrace
trace.py(77):         sys.settrace(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Anaconda3\lib\trace.py", line 500, in run
    self.runctx(cmd, dict, dict)
  File "C:\Program Files\Anaconda3\lib\trace.py", line 508, in runctx
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File "expdb.py", line 8, in hello
    d = 4 / 0
ZeroDivisionError: division by zero
>>>


Solution 1:[1]

The post_mortem method wants a traceback object, not a Trace object. Traceback objects can be acquired from sys.exc_info()[2] inside of an except block, or you can simply call pdb.post_mortem() with no arguments directly (in the except block).

But either way, you must catch the exception before you can debug it.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Lorem Ipsum