如何在开发机器上强制导入错误? (pwd模块)

我正尝试在Google App Engine上使用第三方库(docutils),并且在代码中存在问题(在docutils中):

try: import pwd do stuff except ImportError: do other stuff 

我想导入失败,因为它会在实际的GAE服务器上,但问题是,它不会在我的开发框(Ubuntu的)失败。 如何使它失败,鉴于导入不在我自己的代码?

甚至比搞乱__import__更简单的是在sys.modules __import__中插入None

 >>> import sys >>> sys.modules['pwd'] = None >>> import pwd Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named pwd 

在您的测试框架中,在导入docutils之前,您可以执行此设置任务:

 import __builtin__ self.savimport = __builtin__.__import__ def myimport(name, *a): if name=='pwd': raise ImportError return self.savimport(name, *a) __builtin__.__import__ = myimport 

当然,在拆解过程中把事情恢复正常:

 __builtin__.__import__ = self.savimport 

说明:所有的导入操作都要经过__builtin__.__import__ ,并且你可以重新分配这个名字来让这些操作使用你自己的代码(像导入钩子这样的替代方法更适合于从非文件系统源执行导入的目的,你的,覆盖__builtin__.__import__ ,如你所见,提供真正简单的代码)。