محبوب مثل پایتون ! (قسمت دهم)

زبان برنامه نویسی پایتون cheyab.ir

در آموزش قبلی برنامه نویسی پایتون چ‌یاب متوجه شدید که هنگام باز کردن یک فایل ممکن است اتفاقات غیرمنتظره‌ای بیوفتد و به عنوان مثال فایل باز نشود، زبان پایتون دو امکان برای مدیریت کردن ارورهای غیرمنتظره در نظر گرفته است که در این پست حالت‌های مختلف آن را بررسی خواهیم کرد.

  • Exception handling
  • Assertions

Exception handling

در پایتون استثنا یا همان exception به رخدادی می‌گویند که در هنگام اجرای برنامه رخ دهد و باعث منحرف شدن جریان برنامه شود و اگر مدیریت نشود منجر به از کار افتادن برنامه می‌شود.

برای مدیریت کردن استثناها در زبان برنامه نویسی پایتون از ساختاری به نام try استفاده می‌شود؛ که ساختار آن به شکل زیر است.

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 است، دستوراتی که قصد انجام دادن آنها را دارید و ممکن است ارور غیره منتظره‌ای طی اجرای آن دستورات رخ دهد، قراردهید.

در قسمت except ابتدا نوع ارور غیرمنتظره را مشخص کنید و پس از : دستوراتی که مایل هستید را بنویسید.

دوره های اموزشی برنامه نویسی

می‌توانید از یک و یا چند except استفاده کنید.

دستوراتی که در قسمت else نوشته می‌شود، در حالتی اجرا می‌شوند که هیچ کدام از try و یا except ها اجرا نشوند.

به مثال ذیل و نتیجه‌ی حاصل از آن توجه کنید.

try:
   fh = open("testfile", "w")
   fh.write("This is cheyab.ir 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()
excepcion handling در پایتون

ساختار try-except میتواند به صورت زیر نیز استفاده شود ولی این مدل آن به برنامه‌نویس‌های حرفه‌ای توصیه نمی‌شود زیرا مشخص نمی‌شود که کدام اتفاق غیرمنتظره رخ داده‌است و مانع از اجرای درست برنامه شده است.

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:
   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. 

در ساختار زیر دستوراتی که بعد از finally قرارمی‌گیرد، دستوراتی است که چه try اجرا شود چه except ؛ همیشه و درهرحال اجرا می‌شوند.

try:
   You do your operations here;
   ......................
   Due to any exception, this may be skipped.
finally:
   This would always be executed.
   ......................

مثال زیر نمونه‌ای از دو try تودرتو است.

try:
   fh = open("testfile", "w")
   try:
      fh.write("This is cheyab.ir 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 در پایتون

راه‌های متنوعی برای استفاده از exceptionها وجود دارد، توجه کنید.

def functionName( level ):
   if level < 1:
      raise "Invalid level!", level
      # The code below to this would not be executed
      # if we raise the exception

برای اجرای اکسپشن بالا حتما باید از ساختار زیر استفاده کرد.

try:
   Business Logic here...
except "Invalid level!":
   Exception handling here...
else:
   Rest of the code here...

تاکنون تمام exceptionهایی که استفاده می‌کردیم توسط خود زبان برنامه نویسی پایتون تعریف شده بودند، اگر بخواهید یک exception ایجاد کنید، زبان پایتون به شما اجازه می‌دهد ولی باید آن را به صورت یک subclass از یکی از کلاس‌های exceptionها در نظر بگیرید.

class Networkerror(RuntimeError):
   def __init__(self, arg):
      self.args = arg

کلاس بالا به صورت یک subclass از کلاس RuntimeError در نظر گرفته شده است.می‌توانید با استفاده از دستور raise، اکسپشنی را که تعریف کرده‌اید استفاده کنید.

try:
   raise Networkerror("Bad hostname")
except Networkerror,e:
   print (e.args)

در ادامه جدولی از استثنائات برای شما قرارداده‌ایم که می‌توانید از آنها استفاده کنید.

قابل استفاده به صورت پایه برای تمام استثناهاException
قابل استفاده برای زمانی که تابع next() در iteratorها به جایی اشاره نمی‌کند.StopIteration
با تابع sys.exit()، raise می‌شود.SystemExit
قابل استفاده برای تمام built in اکسپشن‌ها غیر از SystemExit و StopIterationStandardError
قابل استفاده برای تمام ارورهایی که در محاسبات عددی پیش می‌آید.ArithmeticError
قابل استفاده برای زمانی که یک عدد از ماکزیمم محدوده‌ای که برایش تعریف شده تجاوز کند.OverflowError
قابل استفاده برای زمانی که محاسبه floating point به مشکل برمی‌خورد.FloatingPointError
قابل استفاده برای زمانی که یک عدد بر صفر تقسیم شود.ZeroDivisionError
قابل استفاده برای زمانی که Assertion با شکست مواجه می‌شود.AssertionError
قابل استفاده برای زمانی که مرجع صفت دچار مشکل می‌شود.AttributeError
قابل استفاده برای زمانی که input()ورودی ندارد.EOFError
قابل استفاده برای زمانی که دستور import با شکست روبرو می‌شود.ImportError
قابل استفاده برای زمانی که کاربر سیستم را متوقف می‌کند، معمولا با فشار دادن ctrl+cKeyboardInterrupt
کلاس پایه برای ارورهای غیرمنتظره‌ی تمام جستجوهاLookupError
قابل استفاده برای زمانی که indexدر سری وجود ندارد.IndexError
قابل استفاده برای زمانی که یک کلید خاص یافت نمی‌شود.KeyError
قابل استفاده برای زمانی که identifier در نام‌های محلی و یا global یافت نمی‌شود.NameError
قابل استفاده برای زمانی که می‌خواهید به یک متغیر در یک تابع که به آن مقداری داده نشده دسترسی داشته باشید.UnboundLocalError
کلاس پایه برای تمام استثنائاتی که خارج از محدوده‌ی پایتون رخ می‌دهند.EnvironmentError
قابل استفاده برای زمانی که ورودی و یا خروجی مشکل دارند، همچنین برای دستور open() نیز استفاده می‌شود.IOError
قابل استفاده برای زمانی که سینتکس ایراد دارد.     SyntaxError
قابل استفاده برای زمانی که identation مشخص نشده باشد. IndentationError
قابل استفاده برای زمانی که interpretor یک مشکل داخلی دارد.SystemError
قابل استفاده برای زمانی که یک type نامعتبر استفاده شده است.TypeError
قابل استفاده برای زمانی که یک مقدار نامعتبر به عنوان آرگومان برای تابعی فرستاده می‌شود.ValueError
قابل استفاده برای زمانی که ارور تولید شده در هیچکدام از دسته‌ها جای نگیرد.RuntimeError
قابل استفاده برای زمانی که نیاز است یک متد به صورت ارث بری شده اجرا شود و اجرا نشده است.NotImplementedError

Assertion

این دستور برای چک کردن است و معمولا در ابتدای توابع برای چک کردن ورودی و در انتهای توابع برای چک کردن خروجی استفاده می‌شود.اگر شرطی که در Assert آمده، برقرار باشد آنگاه دستورات بعدی اجرا می‌شود و اگر برقرار نباشد مانند exception عمل می‌کند.

مثال:

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))
assert  در پایتون

شما در انتهای این آموزش مهارت handle یا مدیریت کردن انواع ارورهای غیرمنتظره در زبان پایتون را کسب کردید.

در آموزش بعدی با مبحثی به نام تاریخ و زمان و نحوه‌ی استفاده و کاربرد آن در پایتون آشنا خواهیدشد، با ما همراه باشید.

همچنین می‌توانید نظرات، انتقادات،پیشنهادات و یا حتی سوالات خود را در قسمت نظرات با ما در میان بگذارید.

راستی! جهت مطلع شدن از آخرین اخبار و آموزش های ما می‌توانید در کانال تلگرام چ یاب عضو شوید.

فهرست مطالب
متولد خوزستان | فارغ‌التحصیل رشته مهندسی کامپیوتر 💻 | علاقه‌مند به عکاسی 📸، فوتبال ⚽ و برنامه‌نویسی