آموزش مدیریت استثنا در برنامه نویسی شی گرا در پایتون

3 سال پیش

آموزش مدیریت استثنا در برنامه نویسی شی گرا در پایتون

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش مدیریت استثنا در برنامه نویسی شی گرا در پایتون خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پروژه محور پایتون

به طور کلی یک استثنا نشادن دهنده شرایط غیر معمول است. استثنا معمولاً خطاها را نشان می دهد، اما گاهی اوقات عمداً برنامه را در مواردی مانند خاتمه زودهنگام یک روش یا بهبودی از کمبود منابع، استثنا نشان می دهد. تعدادی استثنائات داخلی وجود دارد که شرایطی مانند خواندن گذشته از یک فایل یا تقسیم بر صفر را نشان می دهد. ما می توانیم استثنائات خود را به نام استثناء سفارشی تعریف کنیم.

مدیریت استثنایی به شما این امکان را می دهد که خطاها را با ظرافت مدیریت کنید و در این مورد کار معناداری انجام دهید. مدیریت استثنایی دارای دو جزء است: “پرتاب” و “گرفتن”.

آموزش تشخیص استثناء (خطاها)

هر خطایی در پایتون رخ می دهد، یک استثنا که یک وضعیت خطا را با نوع خطای آن مشخص می کند.

>>> #Exception
>>> 1/0
Traceback (most recent call last):
   File "<pyshell#2>", line 1, in <module>
      ۱/۰
ZeroDivisionError: division by zero
>>>
>>> var = 20
>>> print(ver)
Traceback (most recent call last):
   File "<pyshell#5>", line 1, in <module>
      print(ver)
NameError: name 'ver' is not defined
>>> #Above as we have misspelled a variable name so we get an NameError.
>>>
>>> print('hello)

SyntaxError: EOL while scanning string literal
>>> #Above we have not closed the quote in a string, so we get SyntaxError.
>>>
>>> #Below we are asking for a key, that doen't exists.
>>> mydict = {}
>>> mydict['x']
Traceback (most recent call last):
   File "<pyshell#15>", line 1, in <module>
      mydict['x']
KeyError: 'x'
>>> #Above keyError
>>>
>>> #Below asking for a index that didn't exist in a list.
>>> mylist = [1,2,3,4]
>>> mylist[5]
Traceback (most recent call last):
   File "<pyshell#20>", line 1, in <module>
      mylist[5]
IndexError: list index out of range
>>> #Above, index out of range, raised IndexError.

 

گرفتن استثنا در پایتون

وقتی اتفاق غیر عادی در برنامه شما رخ می دهد و می خواهید با استفاده از مکانیسم استثنا به آن رسیدگی کنید یک استثنا را کنار می گذارید. از کلمات کلیدی try and only برای گرفتن استثنا استفاده می شود. هر زمان که خطایی در بلوک try رخ می دهد، پایتون به دنبال یک تطبیق به جز بلوک برای رسیدگی به آن می گردد. اگر یکی وجود داشته باشد، اجرا در آنجا پرش می کند.

try:
   #write some code
   #that might throw some exception
except <ExceptionType>:
   # Exception handler, alert the user

 

کد داخل بند try به دستور اجرا می شود.

اگر یک استثنا رخ دهد، بقیه بلوک try حذف می شود و بند استثنا اجرا می شود.

try:
   some statement here
except:
   exception handling

بیایید کمی کد بنویسیم تا ببینیم وقتی از هیچ مکانیزم مدیریت خطا در برنامه خود استفاده نمی کنید، چه اتفاقی می افتد.

number = int(input('Please enter the number between 1 & 10: '))
print('You have entered number',number)

 

برنامه فوق تا زمانی که کاربر یک شماره وارد کند به درستی کار می کند، اما اگر کاربران سعی کنند نوع دیگری از داده (مانند یک رشته یا یک لیست) را قرار دهند، چه اتفاقی می افتد.

Please enter the number between 1 > 10: 'Hi'
Traceback (most recent call last):
   File "C:/Python/Python361/exception2.py", line 1, in <module>
      number = int(input('Please enter the number between 1 & 10: '))
ValueError: invalid literal for int() with base 10: "'Hi'"

 

در حال حاضر ValueError یک نوع استثنا است. بیایید سعی کنیم کد فوق را با استفاده از استثنا بازنویسی کنیم.

import sys

print('Previous code with exception handling')

try:
   number = int(input('Enter number between 1 > 10: '))

except(ValueError):
   print('Error..numbers only')
   sys.exit()

print('You have entered number: ',number)

 

اگر برنامه را اجرا کنیم و یک رشته (به جای یک عدد) وارد کنیم، می بینیم که نتیجه متفاوتی دریافت می کنیم.

Previous code with exception handling
Enter number between 1 > 10: 'Hi'
Error..numbers only

 

افزایش استثنائات

برای افزایش استثنائات خود از روش های خود ، باید از کلمه کلیدی raise مانند این استفاده کنید

raise ExceptionClass(‘Some Text Here’)

 

بیایید با استفاده از یک مثال درک بهتری نسبت به قضیه داشته باشیم

def enterAge(age):
   if age<0:
      raise ValueError('Only positive integers are allowed')
   if age % 2 ==0:
      print('Entered Age is even')
   else:
      print('Entered Age is odd')

try:
   num = int(input('Enter your age: '))
   enterAge(num)
except ValueError:
   print('Only positive integers are allowed')

 

برنامه را اجرا کرده و عدد صحیح مثبت را وارد کنید.

Enter your age: 12
Entered Age is even

 

اما وقتی سعی می کنیم یک عدد منفی وارد کنیم ،

Enter your age: -2
Only positive integers are allowed

 

ایجاد کلاس استثنا سفارشی

با گسترش کلاس BaseException یا زیر کلاس BaseException می توانید یک کلاس استثنا سفارشی ایجاد کنید.

Custom Exception Class

از نمودار بالا می توانیم ببینیم اکثر کلاس های استثنا در پایتون از کلاس BaseException گسترش می یابد. می توانید کلاس استثناء خود را از کلاس BaseException یا از زیر کلاس آن استخراج کنید.

یک فایل جدید با نام NegativeNumberException.py ایجاد کنید و کد زیر را بنویسید.

class NegativeNumberException(RuntimeError):
   def __init__(self, age):
      super().__init__()
      self.age = age

 

کد بالا یک کلاس استثناء جدید با نام NegativeNumberException ایجاد می کند که شامل تنها سازنده ای است که با استفاده از ()super __ init __ () ، سازنده کلاس والد را فرا می خواند و سن را تعیین می کند.

حالا برای ایجاد کلاس استثنا سفارشی خود، مقداری کد بنویسید و کلاس استثناء جدید را وارد کنید.

from NegativeNumberException import NegativeNumberException
def enterage(age):
   if age < 0:
      raise NegativeNumberException('Only positive integers are allowed')

   if age % 2 == 0:
      print('Age is Even')

   else:
      print('Age is Odd')

try:
   num = int(input('Enter your age: '))
   enterage(num)
except NegativeNumberException:
   print('Only positive integers are allowed')
except:
   print('Something is wrong')

 

خروجی

 

Enter your age: -2
Only positive integers are allowed

 

راه دیگری برای ایجاد کلاس Exception سفارشی.

class customException(Exception):
   def __init__(self, value):
      self.parameter = value

   def __str__(self):
      return repr(self.parameter)
try:
   raise customException('My Useful Error Message!')
except customException as instance:
   print('Caught: ' + instance.parameter)

 

خروجی

 

Caught: My Useful Error Message!

 

سلسله مراتب استثنا در پایتون

سلسله مراتب کلاس برای استثنائات داخلی این است-

+-- SystemExit 
+-- KeyboardInterrupt 
+-- GeneratorExit 
+-- Exception 
+-- StopIteration 
+-- StopAsyncIteration 
+-- ArithmeticError 
| +-- FloatingPointError 
| +-- OverflowError 
| +-- ZeroDivisionError 
+-- AssertionError 
+-- AttributeError 
+-- BufferError 
+-- EOFError 
+-- ImportError 
+-- LookupError 
| +-- IndexError 
| +-- KeyError 
+-- MemoryError 
+-- NameError 
| +-- UnboundLocalError 
+-- OSError 
| +-- BlockingIOError 
| +-- ChildProcessError 
| +-- ConnectionError 
| | +-- BrokenPipeError 
| | +-- ConnectionAbortedError 
| | +-- ConnectionRefusedError 
| | +-- ConnectionResetError 
| +-- FileExistsError 
| +-- FileNotFoundError 
| +-- InterruptedError 
| +-- IsADirectoryError 
| +-- NotADirectoryError 
| +-- PermissionError 
| +-- ProcessLookupError 
| +-- TimeoutError 
+-- ReferenceError 
+-- RuntimeError 
| +-- NotImplementedError 
| +-- RecursionError 
+-- SyntaxError 
| +-- IndentationError
| +-- TabError 
+-- SystemError 
+-- TypeError 
+-- ValueError 
| +-- UnicodeError 
| +-- UnicodeDecodeError 
| +-- UnicodeEncodeError 
| +-- UnicodeTranslateError 
+-- Warning 
+-- DeprecationWarning 
+-- PendingDeprecationWarning 
+-- RuntimeWarning 
+-- SyntaxWarning 
+-- UserWarning 
+-- FutureWarning 
+-- ImportWarning 
+-- UnicodeWarning 
+-- BytesWarning 
+-- ResourceWarning

 

منبع.

 

 

لیست جلسات آموزش برنامه نویسی شی گرا در پایتون

  1. آموزش برنامه نویسی شی گرا در پایتون
  2. آموزش مقدماتی برنامه نویسی شی گرا در پایتون
  3. آموزش راه اندازی محیط برنامه نویسی شی گرا در پایتون
  4. آموزش ساختار داده برنامه نویسی شی گرا در پایتون
  5. آموزش بلوک ها در برنامه نویسی شی گرا در پایتون
  6. آموزش میانبرها در برنامه نویسی شی گرا در پایتون
  7. آموزش وراثت و چند شکلی در برنامه نویسی شی گرا در پایتون
  8. آموزش الگوی طراحی در برنامه نویسی شی گرا در پایتون
  9. آموزش ویژگی های پیشرفته در برنامه نویسی شی گرا در پایتون
  10. آموزش فایل ها و رشته ها در برنامه نویسی شی گرا در پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه