为导入的库静音 Pytest 库输出

Mute Pytest library output for imported library

我正在测试一个使用 Python Wand 的函数。当我使用无效输入对其进行测试时,它会抛出一个 BlobError,这是 Wand 库中的一个自定义错误。但是,当我这样做时,Wand 中似乎在某个时候发生了另一个 TypeError,这导致 Pytest 结果标准输出下出现了一个丑陋的 Exception ignored in... 错误消息。

我正在检查 Pytest 是否引发了 BlobError,这很好,但我无法同时检查它是否引发了 TypeError,或者只是忽略了该消息。所以这是 Pytest 测试输出:

================================ test session starts =================================
platform linux -- Python 3.5.2, pytest-3.2.5, py-1.5.2, pluggy-0.4.0
rootdir: /path/to/my/project/tests, inifile:
collected 1 item                                                                                                                              

test_split.py .

============================== 1 passed in 0.14 seconds ==============================
Exception ignored in: <bound method Resource.__del__ of <wand.image.Image: (empty)>>
Traceback (most recent call last):
  File "/my/comp/.local/share/virtualenvs/project-BRze6wfl/lib/python3.5/site-packages/wand/resource.py", line 232, in __del__
    self.destroy()
  File "/my/comp/.local/share/virtualenvs/project-BRze6wfl/lib/python3.5/site-packages/wand/image.py", line 2767, in destroy
    for i in range(0, len(self.sequence)):
TypeError: object of type 'NoneType' has no len()

我的测试很简单:

with pytest.raises(wand.exceptions.BlobError):
        wand_split.split(PDF,TEMP, 260)

所以测试按我想要的方式进行,但是我该如何处理额外的 Wand TypeError?

该消息表明在 __del__doc says:

内部引发了异常

Due to the precarious circumstances under which del() methods are invoked, exceptions that occur during their execution are ignored, and a warning is printed to sys.stderr instead. ...

最有可能的是,这发生在 python 解释器退出时,据我所知,没有简单的方法可以使用 pytest 忽略此消息。

但是根据 traceback 的行号,我猜你使用的是有问题的 wand 版本,有人 reported a similar issue on github,你可以尝试升级并在那里报告问题。