在Python 2和3中使用numpy数组进行doctests

时间:2015-12-14 16:47:42

标签: python numpy doctest

我正在使用Python doctests来编写一个可以与Python 2和Python 3一起使用的代码。除了处理包含字符串的numpy数组时,所有工作正常。使用Python 3,以下是正确的:

>>> np.array(["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"])   # doctest: +NORMALIZE_WHITESPACE
array(['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep',
       'oct', 'nov', 'dec'],
      dtype='<U3')

使用Python 2,可以得到这个结果:

array(['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep',
       'oct', 'nov', 'dec'],
      dtype='|S3')

请注意<U3|S3的区别。

有没有简单的方法来调整我的代码,以便能够在两个Python版本中传递测试?我想做可能的租赁侵入式更改。由于doctests也针对用户(因此他们可以看到如何使用代码)我不希望太复杂或误导性的代码给他们错误的正确使用印象。

1 个答案:

答案 0 :(得分:1)

我不知道这是否可以接受,但差异仅在1B中可见:

__repr__

因此,如果您更改doctests以检查阵列的打印输出,那么它应该是兼容的。

>>> A = np.array(["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"])
>>> A
array(['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep',
       'oct', 'nov', 'dec'], 
      dtype='|S3')

这是一个hacky解决方法,但doctests非常有限,并且对python 2 / python 3兼容性不灵活。