当我在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
可以说出实际出错的地方吗?
感谢。
答案 0 :(得分:2)
只有在执行文件的模块级别抛出异常时才会发生这种情况,即不在任何函数内部。因此,如果您只是将代码放在main()
函数中,这将解决它。或者你可以使用ipython,这对调试来说更有趣:
ipython ~/myscript.py --pdb -- -i toc -p pg
这将运行脚本,只有在出现错误时才会停止,并且它也不会受到上述错误的影响。