2

我正在调试一个 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 混淆?

这开始成为一个范围,但我无法想象我自己陷入了什么样的场景。这至少在我看来是合理的:

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

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

除此之外,我会尝试一个新的 virtualenv。

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

4

0 回答 0