التعامل مع الاستثناءات في بايثون بيثون Python Exceptions Handling
التعامل مع الاستثناءات في بايثون بيثون
Python Exceptions Handling
التعامل مع الاستثناءات في بايثون بيثون Python Exceptions Handling
يوفر Python ميزتين مهمتين للغاية للتعامل مع أي خطأ غير متوقع في برامج Python ولإضافة إمكانيات تصحيح الأخطاء فيها -
- Exception Handling التعامل مع الاستثناءات − سيتم تغطية هذا في هذا البرنامج التعليمي. فيما يلي قائمة بالاستثناءات القياسية المتوفرة في Python: استثناءات قياسية.
- Assertions التاكيدات −
- سيتم تغطية هذا في التأكيدات في بيثون تعليمي.
List of Standard Exceptions − قائمة الاستثناءات القياسية -
الرقم. | الاستثناء والوصف |
---|---|
1 |
Exception
الطبقة الأساسية لجميع الاستثناءات
|
2 |
StopIteration
يثار عندما لا تشير طريقة التكرار () إلى أي كائن.
|
3 |
SystemExit
مرفوع بواسطة الدالة sys.exit ().
|
4 |
StandardError
الفئة الأساسية لجميع الاستثناءات المضمنة باستثناء StopIteration و SystemExit.
|
5 |
ArithmeticError
الفئة الأساسية لجميع الأخطاء التي تحدث لحساب رقمي.
|
6 |
OverflowError
مرفوع عندما يتجاوز الحساب الحد الأقصى لنوع رقمي.
|
7 |
FloatingPointError
يتم تفعيله عند الخطأ في العلامة العشرية
|
8 |
ZeroDivisionError
يتم تفعيله عند القسمة على صفر
|
9 |
AssertionError
يحدث في حالة فشل بيان التأكيد.
|
10 |
AttributeError
يحدث في حالة فشل مرجع السمة أو الواجب.
|
11 |
EOFError
يثار عندما لا يكون هناك أي إدخال من وظيفة raw_input () أو input () ويتم الوصول إلى نهاية الملف.
|
12 |
ImportError
يثار عندما يفشل بيان الاستيراد.
|
13 |
KeyboardInterrupt
يثار عندما يقاطع المستخدم تنفيذ البرنامج ، عادة عن طريق الضغط على Ctrl + c.
|
14 |
LookupError
الفئة الأساسية لجميع أخطاء البحث.
|
15 |
IndexError
يحدث عندما لا يتم العثور على فهرس في تسلسل.
|
16 |
KeyError
يثار عندما لا يتم العثور على المفتاح المحدد في القاموس.
|
17 |
NameError
يثار عندما لا يتم العثور على معرف في مساحة الاسم المحلية أو العالمية.
|
18 |
UnboundLocalError
يحدث عند محاولة الوصول إلى متغير محلي في دالة أو طريقة ولكن لم يتم تعيين قيمة له.
|
19 |
EnvironmentError
الفئة الأساسية لجميع الاستثناءات التي تحدث خارج بيئة بيثون.
|
20 |
IOError
يثار عند فشل عملية الإدخال / الإخراج ، مثل بيان الطباعة أو وظيفة open () عند محاولة فتح ملف غير موجود.
|
21 |
IOError
أثار للأخطاء المتعلقة بنظام التشغيل.
|
22 |
SyntaxError
يحدث عندما يكون هناك خطأ في بناء جملة Python.
|
23 |
IndentationError
يحدث عند عدم تحديد المسافة البادئة بشكل صحيح.
|
24 |
SystemError
يثار عندما يجد المترجم مشكلة داخلية ، لكن عندما يواجه هذا الخطأ ، لا يخرج مترجم Python.
|
25 |
SystemExit
يحدث عند إنهاء مترجم Python باستخدام دالة sys.exit (). إذا لم يتم التعامل معها في الكود ، فإن المترجم يؤدي إلى الخروج.
|
26 |
TypeError
يحدث عند محاولة إجراء عملية أو وظيفة غير صالحة لنوع البيانات المحدد.
|
27 |
ValueError
يثار عندما يكون للوظيفة المدمجة لنوع البيانات نوع الوسيطات الصحيح ، لكن الوسيطات تحتوي على قيم غير صالحة محددة.
|
28 |
RuntimeError
يثار عندما لا يقع الخطأ الناتج في أي فئة.
|
29 |
NotImplementedError
يثار عندما لا يتم تطبيق الطريقة المجردة التي تحتاج إلى تنفيذها في فصل دراسي.
|
Assertions in Python تأكيدات في بيثون
التأكيد هو فحص معقول يمكنك تشغيله أو إيقافه عند الانتهاء من اختبار البرنامج.
أسهل طريقة للتفكير في تأكيد ما هي تشبيهه ببيان رفع - أو (أو أن يكون أكثر دقة ، وبيان رفع - إن - لا). يتم اختبار تعبير ، وإذا كانت النتيجة خاطئة ، يتم رفع استثناء.
يتم تنفيذ التأكيدات بواسطة بيان التأكيد ، أحدث كلمة رئيسية لبيثون ، المقدمة في الإصدار 1.5.
غالبًا ما يضع المبرمجون تأكيدات في بداية الوظيفة للتحقق من إدخال صالح ، وبعد استدعاء وظيفة للتحقق من وجود مخرجات صالحة.
The assert Statement تأكيد البيان
عندما تصادف بيانًا مؤكدًا ، تقوم بيثون بتقييم التعبير المصاحب ، وهو ما نأمل أن يكون صحيحًا. إذا كان التعبير خاطئًا ، فإن Python يثير استثناء AssertionError.
The syntax for assert is −بناء الجملة للتأكيد هو -
assert Expression[, Arguments]
إذا فشل التوكيد ، يستخدم Python ArgumentExpression كوسيطة لـ AssertionError. يمكن اكتشاف استثناءات AssertionError ومعالجتها مثل أي استثناء آخر باستخدام عبارة try-باستثناء ، ولكن إذا لم يتم التعامل معها ، فسوف ينهي البرنامج وينتج عنه تتبع.
مثال Example
هذه هي الوظيفة التي تحول درجة الحرارة من درجات كلفن إلى درجة فهرنهايت. نظرًا لأن درجة الصفر في درجة حرارة كيلفن تكون باردة ، تنقلب الوظيفة إذا كانت درجة الحرارة سالبة -
#!/usr/bin/python def KelvinToFahrenheit(Temperature): assert (Temperature >= 0),"Colder than absolute zero!" return ((Temperature-273)*1.8)+32 print KelvinToFahrenheit(273) print int(KelvinToFahrenheit(505.78)) print KelvinToFahrenheit(-5)
عند تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -
32.0 451 Traceback (most recent call last): File "test.py", line 9, inprint KelvinToFahrenheit(-5) File "test.py", line 4, in KelvinToFahrenheit assert (Temperature >= 0),"Colder than absolute zero!" AssertionError: Colder than absolute zero!
What is Exception? مثال مع الاستثناء
الاستثناء هو حدث يحدث أثناء تنفيذ برنامج يعطل التدفق العادي لتعليمات البرنامج. بشكل عام ، عندما يواجه نص بيثون موقفًا لا يمكن التعامل معه ، فإنه يثير استثناءًا. استثناء هو كائن Python يمثل خطأ.
عندما يثير برنامج Python استثناءً ، يجب عليه إما التعامل مع الاستثناء على الفور وإلا فإنه يتم إنهاءه وإنهائه.
العمل والاستثناء
إذا كان لديك بعض التعليمات البرمجية المشبوهة التي قد تثير استثناء ، يمكنك الدفاع عن البرنامج الخاص بك عن طريق وضع التعليمات البرمجية المشبوهة في محاولة: كتلة. بعد تجربة: block ، قم بتضمين باستثناء: عبارة ، متبوعة بكود من التعليمات البرمجية يعالج المشكلة بأناقة قدر الإمكان.
بناء الجملة
هنا بناء جملة بسيط من المحاولة .... باستثناء ... كتل أخرى -
try: You do your operations here; ...................... except ExceptionI: If there is ExceptionI, then execute this block. except ExceptionII: If there is ExceptionII, then execute this block. ...................... else: If there is no exception then execute this block.
فيما يلي بعض النقاط المهمة حول بناء الجملة المذكور أعلاه -
يمكن أن تحتوي عبارة المحاولة الواحدة على متعددة باستثناء العبارات. يكون هذا مفيدًا عندما تحتوي كتلة المحاولة على عبارات قد تطرح أنواعًا مختلفة من الاستثناءات.
يمكنك أيضًا توفير بند عام باستثناء العبارة التي تعالج أي استثناء.
بعد الفقرة (الجمل) باستثناء ، يمكنك تضمين جملة أخرى. يتم تنفيذ التعليمات البرمجية الموجودة في الكتلة الأخرى إذا كانت التعليمة البرمجية الموجودة في try: block لا تثير استثناء.
تعد الكتلة الأخرى مكانًا جيدًا للرمز الذي لا يحتاج إلى التجربة: حماية الكتلة.
مثال
يفتح هذا المثال ملفًا ، ويكتب محتوى في الملف ويخرج برشاقة لأنه لا توجد مشكلة على الإطلاق -
#!/usr/bin/python try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" else: print "Written content in the file successfully" fh.close()
المخرجات
Written content in the file successfully
مثال Example
يحاول هذا المثال فتح ملف لا تملك فيه إذنًا بالكتابة ، لذلك يثير استثناءًا -
#!/usr/bin/python try: fh = open("testfile", "r") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" else: print "Written content in the file successfully"
المخرجان
Error: can't find file or read data
ما عدا البند مع عدم وجود استثناءات
يمكنك أيضًا استخدام العبارة باستثناء دون استثناءات محددة على النحو التالي -
try: You do your operations here; ...................... except: If there is any exception, then execute this block. ...................... else: If there is no exception then execute this block.
.هذا النوع من عبارة try-باستثناء يمسك بجميع الاستثناءات التي تحدث. لا يعتبر استخدام هذا النوع من عبارة try-باستثناء ممارسة برمجة جيدة ، لأنه يمسك بجميع الاستثناءات ولكنه لا يجعل المبرمج يحدد السبب الجذري للمشكلة التي قد تحدث
The except Clause with Multiple Exceptions
يمكنك أيضًا استخدام نفس العبارة باستثناء معالجة استثناءات متعددة كما يلي -
try: You do your operations here; ...................... except(Exception1[, Exception2[,...ExceptionN]]]): If there is any exception from the given exception list, then execute this block. ...................... else: If there is no exception then execute this block.
The try-finally Clause
يمكنك استخدام أخيرا: block جنبا إلى جنب مع try: block. الكتلة النهائية هي مكان لوضع أي كود يجب تنفيذه ، سواء أثار try-block استثناء أم لا. بناء جملة عبارة try-وأخيراً هو هذا -
try: You do your operations here; ...................... Due to any exception, this may be skipped. finally: This would always be executed. ......................
لا يمكنك استخدام جملة أخرى بالإضافة إلى جملة أخيرة.
مثال Example
#!/usr/bin/python try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") finally: print "Error: can\'t find file or read data"
الناتج
Error: can't find file or read data
نفس المثال يمكن كتابته بطريقة أكثر نظافة كما يلي -
#!/usr/bin/python try: fh = open("testfile", "w") try: fh.write("This is my test file for exception handling!!") finally: print "Going to close the file" fh.close() except IOError: print "Error: can\'t find file or read data"
عندما يتم طرح استثناء في كتلة المحاولة ، ينتقل التنفيذ على الفور إلى الكتلة النهائية. بعد تنفيذ جميع العبارات في الكتلة النهائية ، يتم رفع الاستثناء مرة أخرى ويتم التعامل معه في العبارات باستثناء إذا كان موجودًا في الطبقة العليا التالية من عبارة try-باستثناء.
Argument of an Exception المتغيرات استثناء
يمكن أن يحتوي الاستثناء على وسيطة ، وهي قيمة توفر معلومات إضافية حول المشكلة. يختلف محتوى الوسيطة حسب الاستثناء. يمكنك التقاط وسيطة استثناء من خلال توفير متغير في جملة ما يلي كما يلي -
try: You do your operations here; ...................... except ExceptionType, Argument: You can print value of Argument here...
إذا قمت بكتابة الكود للتعامل مع استثناء واحد ، فيمكنك الحصول على متغير يتبع اسم الاستثناء في بيان الاستثناء. إذا كنت تلاحق استثناءات متعددة ، فيمكنك الحصول على متغير يتبع مجموعة الاستثناء.
يتلقى هذا المتغير قيمة الاستثناء الذي يحتوي في الغالب على سبب الاستثناء. يمكن للمتغير تلقي قيمة واحدة أو قيم متعددة في شكل tuple. عادةً ما تحتوي هذه المجموعة على سلسلة الخطأ ورقم الخطأ وموقع الخطأ.
مثال Example
فيما يلي مثال على استثناء واحد -
#!/usr/bin/python # Define a function here. def temp_convert(var): try: return int(var) except ValueError, Argument: print "The argument does not contain numbers\n", Argument # Call above function here. temp_convert("xyz");
المخرجان
The argument does not contain numbers invalid literal for int() with base 10: 'xyz'
Raising an Exceptions اطلاق الاستثناءات
يمكنك رفع الاستثناءات بعدة طرق عن طريق استخدام بيان الزيادة. بناء الجملة العام لعبارة رفع على النحو التالي.
الصيغة Syntax
raise [Exception [, args [, traceback]]]
هنا ، الاستثناء هو نوع الاستثناء (على سبيل المثال ، NameError) والوسيطة هي قيمة الوسيطة الاستثناءية. الحجة اختيارية ؛ إذا لم يتم توفيرها ، الوسيطة استثناء هي بلا.
الوسيطة الأخيرة ، traceback ، هي أيضًا اختيارية (ونادراً ما تستخدم في الممارسة) ، وإذا كان موجودًا ، فسيتم استخدام كائن traceback للاستثناء.
ملاحظة: للحصول على استثناء ، يجب أن تشير عبارة "باستثناء" إلى الاستثناء نفسه الذي يتم طرحه إما كائن فئة أو سلسلة بسيطة. على سبيل المثال ، لالتقاط أعلاه ، يجب أن نكتب جملة باستثناء ما يلي -
try: Business Logic here... except "Invalid level!": Exception handling here... else: Rest of the code here...
User-Defined Exceptions استثناءات معرفة من قبل المستخدم
يسمح لك Python أيضًا بإنشاء استثناءات خاصة بك عن طريق اشتقاق الطبقات من الاستثناءات القياسية المضمنة.
هنا مثال متعلق بـ RuntimeError. هنا ، يتم إنشاء فئة فرعية من RuntimeError. هذا مفيد عندما تحتاج إلى عرض معلومات أكثر تحديدًا عند اكتشاف استثناء.
في كتلة المحاولة ، يتم رفع الاستثناء المعرفة من قبل المستخدم ويتم اكتشافه في الكتلة باستثناء. يتم استخدام المتغير e لإنشاء مثيل للفئة Networkerror.
class Networkerror(RuntimeError): def __init__(self, arg): self.args = arg
لذلك بمجرد تحديد الفئة أعلاه ، يمكنك رفع الاستثناء على النحو التالي -
try: raise Networkerror("Bad hostname") except Networkerror,e: print e.args
التسميات: Python بايثون
<< الصفحة الرئيسية