我在使用Pytest运行它们时遇到了doctest丢失的回溯。它的reversible state library以可逆的方式改变状态,例如代码:
import sys
from altered import state, forget
with state(sys.modules, shutil=forget):
import shutil
# Traceback output....
应该模拟导入问题并崩溃。如果我在项目根目录中将其作为脚本运行,我会得到一个追溯:
Traceback (most recent call last):
...traceback details...
KeyError: 'shutil'
另一方面,我有一个带有doctest格式示例的文档文件,其中包含以下示例:
>>> import sys
>>> from altered import state, forget
>>> with state(sys.modules, shutil=forget):
... import shutil
Traceback (most recent call last):
...
KeyError: 'shutil'
如果我将示例文件作为doctested glob添加到pytest,pytest在运行时会抱怨:
$ py.test docs/examples.rst
============================ test session starts =============================
platform darwin -- Python 2.7.10, pytest-3.0.5, py-1.4.30, pluggy-0.4.0
rootdir: /Users/jacob/src/oss/altered.states, inifile: pytest.ini
collected 1 items
docs/examples.rst F
================================== FAILURES ==================================
[ ... parts of documentation /w doctest ... ]
053
054 >>> import sys
055 >>> from altered import state, forget
056 >>> with state(sys.modules, shutil=forget):
Expected:
Traceback (most recent call last):
...
KeyError: 'shutil'
Got nothing
这可能是pytest&#s; sdout捕获导致麻烦的?或者有人看到任何其他明显的故障排除入口点吗?
我曾尝试在我的doc文件的doctest示例中加入断点,但是步进使我进出pdb本身并且我无法使用该方法对问题有所了解。
答案 0 :(得分:0)
...行动
我的不好:似乎我对模块导入的工作知之甚少!显然,从sys.modules
中删除模块并不是阻止访问(未导入)模块的方法(参见例如Preventing Python code from importing certain modules?)。
很抱歉打扰你,虽然感谢有机会探索防止某些进口的正确方法!
将最顶层的代码更改为
import sys
from altered import state
with state(sys.modules, shutil=None):
import shutil
使一切行为符合预期。
另请参阅this提交以获得额外的好奇心。