我正在为我正在编写的pandas添加的API编写鼻子测试。他们使用Travis CI来运行他们的测试套件。
在我使用的Python版本(Python 2.7.6, numpy 1.9.2)中,以下会引发一个TypeError
:
>>> numpy.round([1.23, 1.132], 2.5)
TypeError: integer argument expected, got float
但是在Travis CI测试的版本(Python 2.6.9, numpy 1.9.2)中,相同的命令会引发警告:
>>> numpy.round([1.23, 1.132], 2.5)
/home/some_user/anaconda/envs/py26/lib/python2.6/site-packages/numpy/core/fromnumeric.py:45: DeprecationWarning: integer argument expected, got float
result = getattr(asarray(obj), method)(*args, **kwds)
array([ 1.23, 1.13])
这意味着我的assertRaises(TypeError)
测试失败。
我怎么能写一个测试,这将检查TypeError
或做assert_produces_warning(DeprecationWarning)
取决于什么Python版本正在测试?
似乎有两种方法可以做到这一点,在pandas测试源中使用。
这种方法有几个(非常相似的)变体:
if sys.version_info < (2, 7):
和更令人愉快的:
from distutils.version import LooseVersion
if sys.version < LooseVersion('2.7'):
在其文档字符串中有有趣的注释:
无政府主义者和软件现实主义者的版本编号。
我不知道哪一种方式比另一种更受欢迎。