我正在使用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也针对用户(因此他们可以看到如何使用代码)我不希望太复杂或误导性的代码给他们错误的正确使用印象。
答案 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兼容性不灵活。