استثناءات بايثون

من المهم أن يكون لديك طريقة للتعامل مع الأخطاء.

تعطينا بايثون معالجة استثنائية.

إذا قمت بلف سطور التعليمات البرمجية في ملفtry:منع:

try:
    # some lines of code

في حالة حدوث خطأ ، ستنبهك Python ويمكنك تحديد نوع الخطأ الذي حدث باستخدام ملفexceptالكتل:

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except <ERROR2>:
    # handler <ERROR2>

للقبض على جميع الاستثناءات التي يمكنك استخدامهاexceptبدون أي نوع خطأ:

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except:
    # catch all other exceptions

الelseيتم تشغيل الكتلة إذا لم يتم العثور على استثناءات:

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except <ERROR2>:
    # handler <ERROR2>
else:
    # no exceptions were raised, the code ran successfully

أfinallyيتيح لك block إجراء بعض العمليات في أي حال ، بغض النظر عما إذا حدث خطأ أم لا

try:
    # some lines of code
except <ERROR1>:
    # handler <ERROR1>
except <ERROR2>:
    # handler <ERROR2>
else:
    # no exceptions were raised, the code ran successfully
finally:
    # do something in any case

يعتمد الخطأ المحدد الذي سيحدث على العملية التي تقوم بها.

على سبيل المثال ، إذا كنت تقرأ ملفًا ، فقد تحصل على ملفEOFError. إذا قسمت رقمًا على صفر فستحصل علىZeroDivisionError. إذا كانت لديك مشكلة في تحويل النوع ، فقد تحصل على ملفTypeError.

جرب هذا الرمز:

result = 2 / 0
print(result)

سينتهي البرنامج بخطأ

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    result = 2 / 0
ZeroDivisionError: division by zero

and the lines of code after the error will not be executed.

Adding that operation in a try: block lets us recover gracefully and move on with the program:

try:
    result = 2 / 0
except ZeroDivisionError:
    print('Cannot divide by zero!')
finally:
    result = 1

print(result) # 1

You can raise exceptions in your own code, too, using the raise statement:

raise Exception('An error occurred!')

This raises a general exception, and you can intercept it using:

try:
    raise Exception('An error occurred!')
except Exception as error:
    print(error)

You can also define your own exception class, extending from Exception:

class DogNotFoundException(Exception):
    pass

pass here means “nothing” and we must use it when we define a class without methods, or a function without code, too.

try:
    raise DogNotFoundException()
except DogNotFoundException:
    print('Dog not found!')

More python tutorials: