"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تجنب استثناءات \'NameError' في بايثون باستخدام وظائف إعادة التوجيه؟

كيفية تجنب استثناءات \'NameError' في بايثون باستخدام وظائف إعادة التوجيه؟

تم النشر بتاريخ 2024-11-04
تصفح:118

How to Avoid \'NameError\' Exceptions in Python Using Forward-Declaring Functions?

وظائف التصريح الأمامي لمنع استثناءات "خطأ في الاسم"

تتطلب بايثون تعريف الوظائف قبل استخدامها. يمكن أن يؤدي هذا إلى استثناءات 'NameError' عندما يتم تعريف الوظائف لاحقًا في التعليمات البرمجية، كما هو الحال عند فرز قائمة باستخدام وظيفة 'cmp' مخصصة.

لتجنب هذه المشكلة، من الممكن "الإعلان المسبق" "الوظيفة قبل تعريفها. يتضمن ذلك تغليف استدعاء الوظيفة في وظيفة منفصلة:

def sort_list():
    sorted_list = sorted(mylist, cmp=cmp_configs)
    print("\n".join([str(bla) for bla in sorted_list]))

def cmp_configs(...) -> int:
    ...

من خلال تحديدsort_list قبل cmp_configs، يمكن لبايثون "رؤية" التصريح الأمامي وتجنب استثناء "NameError".

الوظائف العودية والإعلان الأمامي

في حالة الوظائف العودية، حيث يعتمد تعريف إحدى الوظائف على وظيفة أخرى، يمكن أن يكون التصريح الأمامي داخل نفس الوظيفة مفيدًا:

def spam():
    def eggs():
        if end_condition():
            return end_result()
        else:
            return spam()

    if end_condition():
        return end_result()
    else:
        return eggs()

spam()

من خلال إعادة توجيه البيض ضمن الرسائل غير المرغوب فيها، يمكن لبايثون التعرف على اسم الوظيفة وتنفيذ المكالمة العودية بأمان.

الاستنتاج

إلى الأمام - الإعلان عن الوظائف عن طريق تغليف دعواتها في وظائف منفصلة أو استخدام الوظائف الداخلية ضمن وظائف متكررة يوفر حلاً بديلاً لمنع استثناءات "NameError" عندما يتم تعريف الوظائف لاحقًا في التعليمات البرمجية. ومع ذلك، من المهم ملاحظة أن تنظيم التعليمات البرمجية وتجنب حلقات التبعية بين الوظائف يعد دائمًا ممارسة جيدة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3