كيفية إجبار المستورد على آلة التنمية؟ (وحدة PWD)
-
20-09-2019 - |
سؤال
أحاول استخدام 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__
, ، كما ترى أعلاه ، يوفر رمزًا بسيطًا حقًا).