- , ( set_trace). .
pdb. set_trace - , ( / ).
import inspect
import sys
try:
import ipdb as PDB
except ImportError:
import pdb as PDB
class SetTraceWrapper(object):
def __init__(self):
self.callers_disabled = set()
self.cur_caller = None
def __call__(self):
self.cur_caller = self.get_caller_id()
if self.cur_caller in self.callers_disabled:
return
try:
PDB.set_trace(sys._getframe().f_back)
except TypeError:
PDB.set_trace()
def disable_current(self):
self.callers_disabled.add(self.cur_caller)
def get_caller_id(self, levels_up = 1):
f = inspect.stack()[levels_up + 1]
return ( f[1], f[2] )
set_trace = SetTraceWrapper()
, :
import mypdb as pdb; pdb.set_trace()
set_trace -calling-line, :
pdb.set_trace.disable_current()
:
ipdb pdb
pdb, , pdb.set_trace, , . up . , ipdb ( ).
ipdb , . , pdb.set_trace.disable_current() . , - .
, pdb . set_trace, , not sys.stdout.isatty ( , , stdout /). , pdb set_trace pdb .