Python在“import pdb”崩溃

时间:2012-09-14 03:51:17

标签: python debugging exception pdb

我正在调试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 pdbimport bdbimport 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?

这开始是一个触手可及的范围,但我无法想象自己陷入了什么样的情景。这对我来说至少听起来似乎是合理的:

  • 我在系统python中安装了包X ..
  • 我创建了一个不带 --no-site-packages的virtualenv ,从而将X拉入virtualenv。
  • 我在virtualenv中安装了Y,与X冲突。
  • 我在终端A中运行我的脚本,在virtualenv中,遇到了错误。
  • 我打开了终端B,忘了激活virtualenv,因此最终使用了不同的解释器(@DSM用于此处)。
  • 如果没有virtualenv(和假设的冲突),import pdb可以正常工作。

对不起,这个问题似乎引起了持续的兴趣,我只有预感和猜测。如果您今天遇到这个问题,我的建议是检查堆栈跟踪位置是否符合您的预期。如果是这种情况,请检查那里引用的任何文件是否确实存在,并且看起来完好无损。

除此之外,我会尝试一种新鲜的艺术家。

如果您遇到此问题并找到解决方法,请发布!我很乐意接受你的回答。

0 个答案:

没有答案