你可以写一个脚本dbg.py:
import pdb, warnings, sys
import __builtin__
if __name__ == '__main__':
args, n = [], len(sys.argv)
if n < 2:
sys.exit(1)
elif n > 2:
args.append(__builtin__.__dict__[sys.argv[2]])
if n > 3:
args.append(int(sys.argv[3]))
warnings.simplefilter('error', *args) # treat warnings as exceptions
try:
execfile(sys.argv[1])
except:
pdb.post_mortem(sys.exc_info()[-1])
然后,您可以使用它来调试您的脚本.如果要在任何警告上运行pdb,请将脚本名称作为第一个参数传递:
$python dbg.py yourscript.py
如果只想在引发某种特定类型的警告时运行pdb,则将警告类型作为第二个参数传递:
$python dbg.py yourscript.py DeprecationWarning
行号作为第三个参数:
$python dbg.py yourscript.py DeprecationWarning 342
您还可以使用warnings.filterwarnings而不是warnings.simplefilter重写代码,以使警告过滤更加灵活.