我正在尝试在Google App Engine上使用第三方Lib(Docutils),并在此代码(在Docutils中)遇到问题:

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

我希望导入失败,因为它将在实际的GAE服务器上进行失败,但是问题是它不会在我的开发框(Ubuntu)上失败。考虑到导入不在我自己的代码中,如何使其失败?

有帮助吗?

解决方案

比搞砸更容易 __import__ 只是插入 None 在sys.modules中:

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

其他提示

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

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__, ,如上所述,提供了真正简单的代码)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top