我正在调试python脚本。我有一个部分正在抛出IndexErrors,我想使用pdb找出原因。这是我的剧本:
try:
# do stuff that throws an IndexError
except IndexError:
import pdb; pdb.set_trace()
当我运行脚本时,它会在import pdb; pdb.set_trace()
行崩溃。我得到的追溯:
Traceback (most recent call last):
File "myfile.py", line 113, in <module>
import pdb; pdb.set_trace()
File "/usr/lib/python2.7/pdb.py", line 10, in <module>
import bdb
File "/usr/lib/python2.7/bdb.py", line 3, in <module>
import fnmatch
ImportError: No module named fnmatch
import pdb
,import bdb
和import fnamatch
都可以在python解释器中正常运行。我甚至不知道从哪里开始。
更新 2016年6月8日: 最近这个问题再次引起了我的注意。我恐怕根本不记得这个,决议是什么,甚至我在做什么。我不知道为什么我忽略了回答(好问题!)评论。此时我认为它已经解决 - 我在过去4年中成功使用了pdb:D
我现在可以说:我最有可能使用Ubuntu(可能是12.04)。
我可能会使用virtualenv。或者至少我以为我在使用virtualenv。我希望堆栈跟踪引用/home/foo/.virtualenvs/bar/...
,而不是/usr/lib/python2.7
。
这可能是一个范围,但我记得pip默认情况下并不总是使用--no-site-packages
。也许安装在系统python上的东西与我的virtualenv中的某些内容相冲突。在某处绝对路径,或以某种方式搞乱PYTHONPATH?
这开始是一个触手可及的范围,但我无法想象自己陷入了什么样的情景。这对我来说至少听起来似乎是合理的:
import pdb
可以正常工作。对不起,这个问题似乎引起了持续的兴趣,我只有预感和猜测。如果您今天遇到这个问题,我的建议是检查堆栈跟踪位置是否符合您的预期。如果是这种情况,请检查那里引用的任何文件是否确实存在,并且看起来完好无损。
除此之外,我会尝试一种新鲜的艺术家。
如果您遇到此问题并找到解决方法,请发布!我很乐意接受你的回答。