質問

Google App EngineでサードパーティLib(Docutils)を使用しようとしています。このコード(Docutils)に問題があります。

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

実際のGAEサーバーでのように、インポートに失敗したいのですが、問題は開発ボックス(ubuntu)で失敗しないことです。インポートが私自身のコードにないことを考えると、それを失敗させる方法は?

役に立ちましたか?

解決

いじりよりも簡単です __import__ 挿入するだけです None sys.modules dict:

>>> 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