2016-11-10 9 views
1

pdb .post_mortem()メソッドの使い方を理解しようとしています。この与えられたファイルpdbのpost_mortemメソッドの使い方は?

# 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() 

コマンドプロンプト

''' 
# 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 
>>> 

答えて

3

ため

post_mortem方法はトレースバックオブジェクト、ないトレースオブジェクトを望んでいます。トレースバックオブジェクトはexceptブロック内のsys.exec_info()[2]から取得することも、引数なしで直接pdb.post_mortem()exceptブロック)を呼び出すこともできます。

いずれにしても、デバッグする前に例外をキャッチする必要があります。

+0

ありがとうKevin。私の次のモジュールは、トレースバックされます。 –

関連する問題