في بداية برنامجي، أقوم بتعريف كائن بسيط يقوم بتحديد الإعدادات لكيفية استدعاء خدمة ما، على سبيل المثال:
pythondocument_conversion = DocumentConversionV1(
username='xxx',
password='xxx',
version='2016-05-31')
ثم، أرغب في استدعاء خدمة على جميع الملفات في دليل معين. أحاول القيام بذلك بهذه الطريقة، ولكنني أعتقد أنه لا يمكن العثور على كائن التكوين – يبدو أنه خارج نطاق الرؤية، أحصل على هذا الخطأ:
pythonNameError: name 'config' is not defined
فيما يلي ما يأتي مباشرة بعد إنشاء الكائن:
pythonyourpath = 'C:\\Users\\Desktop\\working_folder\\'
for root, dirs, files in os.walk(yourpath, topdown=False):
for name in files:
print(os.path.join(root, name))
config['conversion_target'] = DocumentConversionV1.ANSWER_UNITS
with open(join(dirname(__file__), os.path.join(root, name)), 'r') as document:
print(json.dumps(document_conversion.convert_document(document=document, config=config), indent=2))
لقد حاولت تعريف كائن التكوين داخل حلقة for، وداخل بند with، ولكن يبدو أنه لا يزال لا يعمل. بشكل غريب، إذا قمت بإزالة حلقة for من الكود أعلاه، يبدو أنه يعمل (إذا تم تشغيله على ملف واحد بدلاً من مجلد).
هل لديك أفكار حول ما قد يكون المشكلة هنا؟
شكرًا
المزيد من المعلومات
بالطبع، دعونا نقوم بتفحص الكود بمزيد من التفصيل لفهم المشكلة المحتملة. يبدو أن الخطأ ينبع من عدم تعريف متغير config
قبل استخدامه داخل الحلقة.
عندما تحاول تعيين config['conversion_target'] = DocumentConversionV1.ANSWER_UNITS
، يظهر خطأ لأن Python لا يعرف متغير config
في هذا السياق. لذلك يجب عليك تعريف config
قبل استخدامه. يمكن أن يكون الحل كالتالي:
pythonyourpath = 'C:\\Users\\Desktop\\working_folder\\'
for root, dirs, files in os.walk(yourpath, topdown=False):
for name in files:
print(os.path.join(root, name))
# قم بتعريف متغير config قبل استخدامه
config = {}
config['conversion_target'] = DocumentConversionV1.ANSWER_UNITS
with open(join(dirname(__file__), os.path.join(root, name)), 'r') as document:
print(json.dumps(document_conversion.convert_document(document=document, config=config), indent=2))
تأكد من أنك قد قمت بتعريف config
قبل استخدامه داخل الحلقة. يجب أن يتم ذلك في كل تكرار للحلقة لضمان عدم حدوث تعارض في نطاق المتغيرات. يمكنك أيضًا تعريف config
في بداية البرنامج إذا كنت تستخدمه في أكثر من مكان.
هذا ينبغي أن يساعد في حل مشكلة NameError
التي واجهتك. تأكد من أن جميع المتغيرات تم تعريفها بشكل صحيح وفي النطاق الصحيح.