Frage

Ich versuche, eine LIB von Drittanbietern (DOCUTILS) in Google App Engine zu verwenden, und habe ein Problem mit diesem Code (in DOCUTILS):

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

Ich möchte, dass der Import fehlschlägt, wie auf dem tatsächlichen GAE -Server, aber das Problem ist, dass er in meinem Entwicklungsfeld (Ubuntu) nicht fehlschlägt. Wie kann es scheitern, da der Import nicht in meinem eigenen Code liegt?

War es hilfreich?

Lösung

Noch einfacher, als miteinander zu spielen __import__ Fügt sich nur ein None im sys.modules dikt:

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

Andere Tipps

In Ihrem Test -Framework können Sie diese Setup -Aufgabe ausführen:

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

Und natürlich in Teardown die Dinge wieder normalisiert:

__builtin__.__import__ = self.savimport

Erläuterung: Alle Importoperationen gehen durch __builtin__.__import__, und Sie können diesen Namen neu zuweisen, damit solche Operationen Ihren eigenen Code verwenden (Alternativen wie Importhaken sind für solche Zwecke besser wie die Durchführung von Imports aus Nicht-Akte-Quellen, jedoch für Zwecke wie Ihre, die überschreiben __builtin__.__import__, Wie Sie oben sehen, bietet ein wirklich einfacher Code).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top