التعامل مع الأخطاء في بايثون

التعامل مع الأخطاء في بايثون

في هذه المقالة، سنشرح التعامل مع الأخطاء في بايثون۔

YouTube Video

التعامل مع الأخطاء في بايثون

يتم التعامل مع الأخطاء في بايثون بشكل رئيسي باستخدام الكلمات المفتاحية try وexcept وelse وfinally۔ استخدام هذه التراكيب يمكنّك من الاستجابة بشكل مناسب عند حدوث خطأ في برنامجك۔ فيما يلي، سوف نشرح كيفية استخدام كل منها۔

كتلة try

داخل كتلة try، تقوم بكتابة الكود الذي تريد تنفيذه۔ إذا حدث خطأ داخل هذه الكتلة، ينتقل تنفيذ البرنامج فورًا إلى كتلة except۔

 1try:
 2    # Code that may raise an error (division by zero, for example)
 3    #number = int(input("Enter a number: "))
 4    number = int("abc")
 5    result = 10 / number
 6    print("Result:", result)
 7except ValueError as e:
 8    # Handle invalid input (e.g. non-numeric input)
 9    print("Invalid input. Please enter a whole number.")
10    print(f"Value error: {e}")
11except ZeroDivisionError as e:
12    # Handle division by zero error
13    print("Cannot divide by zero!")
14    print(f"Zero division error: {e}")
  • هذا الكود هو مثال على كشف الأخطاء في كتلة try والتعامل معها بشكل مناسب من خلال التقاط إما ValueError أو ZeroDivisionError۔

كتلة except

في كتلة except، تقوم بكتابة الكود الذي سيتم تنفيذه عند حدوث استثناء (خطأ) معين۔ يمكنك أيضًا التقاط استثناءات محددة بناءً على نوع الاستثناء الذي يحدث۔

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 0
 4    result = 10 / number
 5    print("Result:", result)
 6except ZeroDivisionError as e:
 7    print("Cannot divide by zero!")
 8    print(f"Zero division error: {e}")
 9except ValueError as e:
10    print("Input was not a valid integer.")
11    print(f"Value error: {e}")
  • هذا الكود هو مثال على تنفيذ معالجة مختلفة لكل نوع من الاستثناءات في كتلة except عندما يحدث خطأ في كتلة try۔

التعامل مع استثناءات متعددة معًا

حدد مجموعة (tuple) عندما يمكن أن تشترك عدة فئات استثناء في نفس المنطق التعاملي۔

1try:
2    my_list = [1, 2]
3    result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5    print(f"Exception occurred: {e}")
  • هذا الكود هو مثال على التقاط كل من IndexError وZeroDivisionError معًا والتعامل مع الاستثناءات بنفس الطريقة۔

التقاط الاستثناءات بدون شروط

احذف الوسيط لحلقة except إذا كنت تريد التعامل مع جميع أنواع الاستثناءات في وحدة واحدة۔

1try:
2    # This code might cause some exception
3    result = "10" + 5  # TypeError
4except Exception as e:
5    print("Unexpected error")
  • مع ذلك، التعامل مع استثناءات محددة بدلاً من التقاط جميع الاستثناءات دون شرط يساعد أكثر في العثور على الأخطاء وتصحيحها۔ كلما أمكن، فإن التعامل بشكل صريح فقط مع الاستثناءات المتوقعة مثل ValueError أو TypeError سيزيد من قوة كودك۔

كتلة else

كتلة else يتم تنفيذها فقط إذا لم تحدث أي أخطاء داخل كتلة try۔

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 5
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
  • هذا الكود هو مثال يتم فيه تنفيذ كتلة else فقط إذا لم يحدث أي خطأ في كتلة try۔

كتلة finally

تُستخدم كتلة finally لكتابة الكود الذي سيتم تنفيذه دائمًا في النهاية، بغض النظر عن حدوث خطأ في كتلة try۔ هذا مفيد لتحرير الموارد أو إجراء مهام التنظيف۔

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = int("abc")
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
14finally:
15    # This block will always execute, regardless of whether an exception was raised
16    print("Execution completed.")
  • هذا الكود هو مثال يوضح أن كتلة finally تُنفذ بغض النظر عما إذا حدث استثناء أم لا۔

كلمة raise المفتاحية

من الممكن أيضًا إثارة استثناء باستخدام الكلمة المفتاحية raise عندما لا يتم استيفاء شروط معينة في الكود الحالي۔

1def divide(a, b):
2    if b == 0:
3        raise ValueError("Cannot divide by zero.")
4    return a / b
5
6try:
7    result = divide(10, 0)
8except ValueError as e:
9    print(f"Error: {e}")
  • هذا الكود هو مثال على إثارة استثناء بشكل صريح باستخدام الكلمة المفتاحية raise عندما لا يتحقق شرط ما۔

الخاتمة

من خلال التعامل مع الأخطاء بهذه الطريقة، يمكنك منع تعطل البرنامج، وعرض رسائل مناسبة للمستخدم، ومواصلة معالجة البرنامج بطريقة سلسة۔

يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔

YouTube Video