تصحيح الأخطاء في بايثون: استبدال ()print بـ ()ic والقيام بذلك كالمحترفين

قبل بضعة أشهر، أثناء عملي على مشروع تحليل بيانات باستخدام بايثون، واجهتُ خطأً متكررًا. ورغم مراجعتي المتكررة للكود، لم أستطع تحديد المشكلة. وكأي مبرمج محترم، لجأتُ إلى دالة print() القديمة لفهم ما يحدث. ولكن، عندما طبعتُ عددًا لا نهائيًا من أسطر الإخراج في الطرفية، أدركتُ عدم فعالية هذه الطريقة. عندها اكتشفتُ IceCream، وهي مكتبة ساعدتني على تحسين عملية تصحيح الأخطاء بشكل كبير، وجعلتها أكثر وضوحًا وتنظيمًا واحترافية.

مقارنة: print() مقابل ic()

لقد استخدمنا جميعًا دالة print() لتصحيح أخطاء الأكواد البرمجية، ولكن لهذه التقنية حدودها. فرغم سهولة تطبيقها، إلا أنها غالبًا ما تُصبح مُربكة عند العمل مع دوال وهياكل بيانات أكثر تعقيدًا. وهنا يأتي دور IceCream، بدالة ic()، وهي أداة مُصممة خصيصًا لتصحيح الأخطاء مع ميزات إضافية.

مثال أساسي مع print():

def add(x, y):
    return x + y

# Trying to debug with print()
print(add(10, 20))  # Output: 30
print(add(30, 40))  # Output: 70

تكمن مشكلة هذا النهج في أنه عندما يصبح الناتج واسع النطاق، لا يتضح أي القيم تنتمي إلى كل نتيجة. في هذه الحالة، يجب ربط كل نتيجة يدويًا بالعملية التي أنتجتها.

نفس الوضع مع ic():

from icecream import ic

# Using ic() to debug
ic(add(10, 20))
ic(add(30, 40))

الناتج

ic| add(10, 20): 30
ic| add(30, 40): 70

كما ترى، لا يكتفي IceCream بطباعة نتيجة العملية، بل يُظهر أيضًا الدالة التي تم استدعاؤها، بالإضافة إلى المعلمات المُمررة. هذا يُبسط عملية التصحيح بشكل كبير، خاصةً عند وجود استدعاءات متعددة للدالات ذات مخرجات متشابهة.

مزايا استخدام ic()

معلومات التشغيل التفصيلية

مع ic()، لا ترى النتيجة فحسب، بل ترى أيضًا العملية التي تم تنفيذها. هذا يُغني عن استخدام f-strings أو التعليقات اليدوية لمعرفة ما يُطبع.

def multiply(a, b):
    return a * b

ic(multiply(5, 5))

الناتج

ic| multiply(5, 5): 25

تصحيح الأخطاء والتعيين في وقت واحد

ميزة رئيسية أخرى لـ ic() هي أنها تسمح لك بتصحيح الأخطاء وتعيين القيم في نفس الوقت، وهو أمر غير ممكن مع print().

# Using print()
result = print(multiply(4, 6))  # Output: 24
print(result)  # Output: None

# Using ic()
result = ic(multiply(4, 6))  # Output: ic| multiply(4, 6): 24
print(result)  # Output: 24

مع ic()، يمكنك الحصول على القيمة المحسوبة وتخزينها في متغير النتيجة، على عكس print()، التي لا ترجع أي قيمة.

الوصول إلى هياكل البيانات

عند العمل مع القواميس أو القوائم، تُصبح الدالة ic() أكثر فائدة. لنرَ كيف تعمل عند الوصول إلى عناصر القاموس:

data = {'a': 1, 'b': 2, 'c': 3}

# Using ic() to debug
ic(data['a'])

الناتج

ic| data['a']: 1

مرة أخرى، فإنه يظهر بوضوح المفتاح الذي تم الوصول إليه والقيمة التي تم إرجاعها.

رؤية أفضل للهياكل المعقدة

عند العمل مع هياكل بيانات أكبر، مثل القواميس المتداخلة أو JSON، تعمل ic() على تحسين قابلية قراءة الكود، وعرض الهياكل بطريقة أكثر تنظيماً:

complex_data = {
    "name": "John",
    "age": 30,
    "languages": ["Python", "JavaScript"]
}

ic(complex_data)

يجعل الإخراج، مع الألوان والتنسيق المنظم، من السهل جدًا فهم وتحليل محتويات هياكل البيانات الكبيرة.

الميزات الإضافية لل IceCream

بالإضافة إلى المزايا الأساسية، يوفر IceCream ميزات إضافية تسمح لك بالتحكم في كيفية عمل دالة ic():

تعطيل ic() مؤقتًا

إذا كنت في مرحلة ما لا تريد أن تقوم ic() بطباعة أي شيء لأقسام معينة من الكود الخاص بك، فيمكنك تعطيلها ثم إعادة تمكينها لاحقًا:

ic.disable()  # Disables ic()
ic(multiply(3, 3))  # Prints nothing

ic.enable()  # Re-enables ic()
ic(multiply(3, 3))  # Output: ic| multiply(3, 3): 9

إعداد الناتج

يمكنك تخصيص نتائج ic()، مثل إضافة البادئات أو كتابة المخرجات في ملف بدلاً من طباعتها على الطرفية.

def log_to_file(text):
    with open("debug.log", "a") as f:
        f.write(text + "\n")

ic.configureOutput(prefix="DEBUG| ", outputFunction=log_to_file)

ic(multiply(7, 7))

سيؤدي هذا إلى إرسال ناتج ic() إلى ملف debug.log مع البادئة "DEBUG| ".

يُعد استخدام دالة print() لتصحيح الأخطاء تقنية شائعة، إلا أن لها حدودًا. يُقدم IceCream حلاً أكثر متانة واحترافية لتصحيح أخطاء بايثون، حيث يوفر معلومات مفصلة ومرونة وتنسيقًا أكثر وضوحًا. باستخدام دالة ic()، يمكنك توفير الوقت وتحسين قابلية قراءة الكود أثناء تصحيح الأخطاء.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading