2015-12-14 46 views
0

我正在使用Python文檔測試來處理Python 2和Python 3的代碼。除了使用包含字符串的numpy數組時,所有工作都很好。使用Python 3,以下是正確的:在Python 2和3中使用numpy數組進行文檔測試

>>> 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

我有一個類似的問題,我的解決方案是轉儲doctests。 – wim

+0

相關:[是可移植的python 2/python 3可能的doctests?](http://stackoverflow.com/q/20805434/674039) – wim

+0

謝謝。現在我已經改變了標題以提及numpy數組,以便它不會與鏈接問題重複。 –

回答

0

我不知道這是否會是你或不能接受的,但不同的是隻在__repr__可見:如果您更改文檔測試檢查數組的打印輸出

>>> 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') 

所以,它應該是兼容的。

>>> print(A) 
['jan' 'feb' 'mar' 'apr' 'may' 'jun' 'jul' 'aug' 'sep' 'oct' 'nov' 'dec'] 

這是一個哈克解決方法充其量不過是文檔測試非常有限的,而不是靈活蟒蛇2/3蟒蛇兼容性。