沒有必要創建一個模塊。沒有Python代碼在意somemodule.simplevalue
是否實際上是對模塊屬性的引用。爲此,程序需要檢查somemodule
的類型。何必?
既然你只是想從模塊的單一價值,並導入到你自己的命名空間,只是把它定義:
simplevalue = 42
如果你喜歡,用try/except
嘗試先導入真正的模塊。
try:
from somemodule import simplevalue
except ImportError:
simplevalue = 42
如果要導入整個模塊,但只使用一個值,則可以使用類來定義命名空間。
try:
import somemodule
except ImportError:
class somemodule(object):
simplevalue = 42
現在somemodule.simplevalue
指的是數值,不管模塊是否可用。
如果希望其他模塊也進口somemodule
看到你僞造補課,如模塊,就像在你的單元測試,只是這樣做之後:
import sys
sys.modules["somemodule"] = somemodule
感謝托馬斯,完美。是的,我同意,這不是我想寫的代碼模式。但是對於這個測試場景它可以正常工作。 – smullins 2011-01-14 01:05:16
@smullins:不客氣。這個警告對於匿名未來的讀者來說比你更多,因爲你聽起來像你知道你在做什麼。 – 2011-01-14 01:25:30