5

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

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

実際のGAEサーバーの場合と同様に、インポートを失敗させたいのですが、問題は、開発ボックス(ubuntu)で失敗しないことです。インポートが自分のコードにない場合、失敗させるにはどうすればよいですか?

4

2 に答える 2

11

いじるよりもさらに簡単なのは、sys.modulesdict__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
于 2010-02-13T20:41:31.047 に答える
4

テストフレームワークでは、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__、上記のように、本当に単純なコードを提供します)。

于 2010-02-13T15:49:21.857 に答える