为什么`pdb`陈述一些无关和误导的东西?

时间:2014-08-12 14:49:45

标签: python

当我在shell中运行时,我的Python脚本会报告它出错的地方("第122行和#34;在myscript.py中):

$ toc2others.py -i toc -p pg
Traceback (most recent call last):
  File "~/myscript.py", line 122, in <module>
    p = re.match(keywords[index+1][0], inlines[n+1], re.IGNORECASE)
IndexError: list index out of range

这是因为keywords[index+1]超出了keywords的索引范围。

但是,当我在pdb下运行时,它不会报告错误的位置,但会说不相关的内容(报告错误发生在import re)。

$ pdb ~/myscript.py -i toc -p pg
> /myscript.py(3)<module>()
-> import re
(Pdb) c
Traceback (most recent call last):
  File "/usr/lib/python2.7/pdb.py", line 1314, in main
    pdb._runscript(mainpyfile)
  File "/usr/lib/python2.7/pdb.py", line 1233, in _runscript
    self.run(statement)
  File "/usr/lib/python2.7/bdb.py", line 387, in run
    exec cmd in globals, locals
  File "<string>", line 1, in <module>
  File "~/myscript.py", line 3, in <module>
    import re
IndexError: list index out of range
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program

我想知道为什么pdb陈述一些无关和误导的东西?

pdb可以说出实际出错的地方吗?

感谢。

1 个答案:

答案 0 :(得分:2)

实际上,这是一个错误。 见问题:

只有在执行文件的模块级别抛出异常时才会发生这种情况,即不在任何函数内部。因此,如果您只是将代码放在main()函数中,这将解决它。或者你可以使用ipython,这对调试来说更有趣:

ipython ~/myscript.py --pdb -- -i toc -p pg

这将运行脚本,只有在出现错误时才会停止,并且它也不会受到上述错误的影响。