
808
|
第 26 章 v2/v3 的移轉與共存
請注意,它並非永遠都像看起來那樣是萬靈丹(而在此它當然沒有提供立
即的解藥,如我們稍後會看到的)。雖然在這種情況中它是有幫助的,但
如果程式混有二進位和文字字串資料,就沒有一種能夠同時滿足兩種用途
的表示方式,而許多開發人員偏好循序漸進。這些變更可能在 Python 2 中
造成問題,這是需要被解決的。不只如此,所有的 docstrings 也會因此隱
含地變為 Unicode,而那在 2.7.7 之前會導致語法錯誤。
單是這個變更,實際上可能會使失敗的測試數目
增加
為三個,而這個錯誤
在所有情況中都是相同的:
File "/Users/sholden/Projects/Python/voitto/tappio/lexer.py",
line 45, in build_set
assert type(ch) in (str, str)
你可以看到
2to3
移除
unicode
型別的變更反過來咬了我們一口,因為雖然
那在 v3 底下是可行的,但在 v2 底下,我們需要明確地允許型別為
unicode
的字串。我們不能只是回復那個變更,因為在 v3 底下沒有該型別可用:試
著參考它會提出
NameError
例外。
我們需要的是兩個版本都相容的一種型別。
six
模組(稍後涵蓋)確實有
引進這樣的型別,但我們沒有選擇承受那整個模組帶來的額外負擔,在此
我們選擇撰寫一個簡單的相容性模組
tappio/compat.py
,它會為執行中的版
本建立
unicode
這個名稱的適當定義。依照移植指南( ...