腳本如何同時兼容Python2和Python3?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Future模塊導?
這也是最重要的?法,就是導?__future__模塊。它可以幫你在Python2中導?Python3的功能。這有?組例?。上下?管理器是Python2.6+引?的新特性,如果你想在Python2.5中使?它可以這樣做:
from __future__ import with_statement
在Python3中print已經變為?個函數。如果你想在Python2中使?它可以通過__future__導?:
# Output:
from __future__ import print_function
print(print)
# Output: <built-in function print>
模塊重命名
?先,?多時候我們會這樣在腳本中導?模塊:
import foo
# or
from foo import bar
其實你也可以這樣做:
import foo as foo
這樣做可以起到和上?代碼同樣的功能,但最重要的是它能讓你的腳本同時兼容Python2和Python3?,F在我們來看下?的代碼:
try:
import urllib.request as urllib_request # for Python 3
except ImportError:
import urllib2 as urllib_request # for Python 2
稍微解釋?下上?的代碼。我們將模塊導?代碼包裝在try/except語句中。我們是這樣做是因為在Python 2中并沒有urllib.request模塊。這將引起?個ImportError異常。?在Python2中urllib.request的功能則是由urllib2提供的。所以,當我們試圖在Python2中導?urllib.request模塊的時候,?旦我們捕獲到ImportError我們將通過導?urllib2模塊來代替它。
最后,你要了解as關鍵字的作?。它將導?的模塊映射到urllib.request,所以我們通過urllib_request這個別名就可以使?urllib2中的所有類和?法了。
過期的Python2內置功能
另?個需要了解的事情就是Python2中有12個內置功能在Python3中已經被移除了。要確保在Python2代碼中不要出現這些功能來保證對Python3的兼容。這有?個強制讓你放棄12內置功能的?法:
from future.builtins.disabled import *
現在,只要你嘗試在Python3中使?這些被遺棄的模塊時,就會拋出?個NameError異常,如下:
from future.builtins.disabled import *
apply()
# Output: NameError: obsolete Python 2 builtin apply is disabled
標準庫向下兼容的外部?持
有?些包在?官?的?持下為Python2提供了Python3的功能。例如我們有:
enum pip install enum34
singledispatch pip install singledispatch
pathlib pip install pathlib
關于腳本如何同時兼容Python2和Python3問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。