没有必要创建一个模块。没有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