如果導(dǎo)入的模塊不存在,Python解釋器會(huì)報(bào)ImportError錯(cuò)誤:
>>> import something
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named something
有的時(shí)候镇草,兩個(gè)不同的模塊提供了相同的功能箍邮,比如StringIO和cStringIO都提供了StringIO這個(gè)功能两蟀。
這是因?yàn)镻ython是動(dòng)態(tài)語言,解釋執(zhí)行,因此Python代碼運(yùn)行速度慢伴网。
如果要提高Python代碼的運(yùn)行速度衔掸,最簡單的方法是把某些關(guān)鍵函數(shù)用C語言重寫烫幕,這樣就能大大提高執(zhí)行速度。
同樣的功能敞映,StringIO是純Python代碼編寫的较曼,而cStringIO部分函數(shù)是C寫的,因此 cStringIO 運(yùn)行速度更快振愿。
利用ImportError錯(cuò)誤捷犹,我們經(jīng)常在Python中動(dòng)態(tài)導(dǎo)入模塊:
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
上述代碼先嘗試從cStringIO導(dǎo)入,如果失敗了(比如cStringIO沒有被安裝)冕末,再嘗試從StringIO導(dǎo)入萍歉。這樣,如果cStringIO模塊存在档桃,則我們將獲得更快的運(yùn)行速度枪孩,如果cStringIO不存在,則頂多代碼運(yùn)行速度會(huì)變慢,但不會(huì)影響代碼的正常執(zhí)行蔑舞。
try的作用是捕獲錯(cuò)誤拒担,并在捕獲到指定錯(cuò)誤時(shí)執(zhí)行except語句。