سؤال

أحاول استخدام LIB (DOCUTILS) من طرف ثالث على محرك تطبيقات Google وأواجه مشكلة في هذا الرمز (في 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

نصائح أخرى

في إطار الاختبار الخاص بك ، قبل أن تتسبب في استيراد 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

Explanation: جميع عمليات الاستيراد تمر من خلال __builtin__.__import__, ، ويمكنك إعادة تعيين هذا الاسم لوجود مثل هذه العمليات ، تستخدم الكود الخاص بك (بدائل مثل خطافات الاستيراد أفضل لأغراض مثل إجراء الاستيراد من مصادر غير مراس __builtin__.__import__, ، كما ترى أعلاه ، يوفر رمزًا بسيطًا حقًا).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top