문제

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

다른 팁

테스트 프레임 워크에서 문서를 가져 오기 전에이 설정 작업을 수행 할 수 있습니다.

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__, 그리고 해당 운영이 자신의 코드를 사용하도록 해당 이름을 재 할당 할 수 있습니다 (Import Hook와 같은 대안은 Filesystem이 아닌 소스에서 가져 오는 것과 같은 목적으로 더 좋습니다. __builtin__.__import__, 위에서 볼 수 있듯이 진정으로 간단한 코드를 제공합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top