8.2. الاستثناءات #
حتى لو كانت العبارة أو التعبيرات صحيحة لغويًا، فقد تُسبب خطأً عند محاولة تنفيذها. تُسمى الأخطاء التي يتم اكتشافها أثناء التنفيذ استثناءات، وهي ليست قاتلة بلا قيد أو شرط: ستتعلم قريبًا كيفية التعامل معها في برامج بايثون. مع ذلك، لا تُعالج البرامج معظم الاستثناءات، مما يؤدي إلى ظهور رسائل خطأ كما هو موضح هنا:
>>> 10 * (1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 4 + spam*3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
يشير السطر الأخير من رسالة الخطأ إلى ما حدث. تأتي الاستثناءات بأنواع مختلفة، ويتم طباعة النوع كجزء من الرسالة: الأنواع في المثال هي ZeroDivisionError وNameError وTypeError. السلسلة المطبوعة كنوع استثناء هي اسم الاستثناء المُضمّن الذي حدث. ينطبق هذا على جميع الاستثناءات المُضمّنة، ولكن ليس بالضرورة على الاستثناءات المُعرّفة من قِبل المستخدم (مع أنها اتفاقية مفيدة). أسماء الاستثناءات القياسية هي مُعرّفات مُضمّنة (وليست كلمات مفتاحية محجوزة).
يُقدّم باقي السطر تفاصيل بناءً على نوع الاستثناء وسببه.
يُظهر الجزء السابق من رسالة الخطأ سياق حدوث الاستثناء، على شكل تتبع مكدس. عادةً ما يحتوي على تتبع مكدس يسرد أسطر المصدر؛ ومع ذلك، لن يعرض الأسطر المقروءة من الإدخال القياسي.
تسرد الاستثناءات المُضمّنة الاستثناءات المُضمّنة ومعانيها.