اعتراض در زبان پایتون به چه معناست ؟
اعتراض در زبان پایتون به چه معناست ؟
هر زمان که یک خطاي زمان اجرا اتفاق میافتد، مفسر پایتون یک اعتراض را تولیـد مـیکنـد. در این حالت معمولاً برنامه متوقف میشود و پایتون پیغام خطایی را چاپ میکند. براي مثال تقسیم بر صفر یک اعتراض میسازد:
>> print 55/0
ZeroDivisionError: integer division or modulo
همچنین دستیابی به عنصري از لیست که وجود ندارد:
>> a = []
>>> print a[5]
IndexError: list index out of range
یا دستیابی به کلیدي که در دیکشنري نیست:
>> b = {}
>>> print b[‘what’]
KeyError: what
در هر مورد، پیغام خطا داراي دو بخش است: نوع خطا کـه قبـل از علامـت کـولن قـرار دارد و جزئیات خطا که بعد از علامت کولن قرار دارد. معمولاً پایتون یک پسیـابی از جـایی کـه برنامـه در آن محل مشکل داشته است را هم چاپ میکند، اما ما آنها را در مثالها حذف کردهایم. گاهی اوقات ما میخواهیم عملیاتی را که میتواند به یک اعتراض منجر شـود، اجـرا کنـیم، امـا نمیخـواهیم برنامـه متوقـف شـود. مـا مـیتـوانیم بـهوسـیلۀ دسـتورات try و except از اعتـراض پیشگیري کنیم. براي مثال ممکن است ما به کاربر اعلان کنیم که نام فایلی را وارد کند و سپس سعی کنیم کـه آن فایل را باز کنیم. اگر فایل وجود نداشت، ما نمیخواهیم که برنامه خراب شـود بلکـه مـیخـواهیم از اعتراض پیشگیري کنیم:
filename = raw_input(‘Enter a file name: ‘)
try:
f = open (filename, “r”)
except:
print ‘There is no file named’, filename
دستور try ،فرامین بلوك اول را اجرا میکند. اگر هیچ خطایی رخ ندهد، از دسـتور except چشمپوشی میکند و اگر هر گونه خطایی رخ دهـد، شـاخۀ دسـتور except اجـرا مـیشـود و ادامـه مییابد. ما میخواهیم این قابلیت را در یک تابع بستهبندي کنیم: تابع exists نام فایل را میگیـرد و در صورتی که وجود داشت true و در غیر اینصورت false را برمیگرداند:
def exists(filename):
try:
f = open(filename)
f.close()
return 1
except:
return 0
شما میتوانید از چند بلوك except براي کنترل انواع مختلف اعتراض اسـتفاده کنیـد. بـراي جزئیات بیشتر میتوانید به کتاب مرجع راهنماي پایتون یا پیوست ب مراجعه کنید. اگر برنامۀ شما وضعیت خطا را مشخص میکند، میتوانید آن را مولد اعتراض بسازید. در اینجـا مثالی عنوان شده که ورودي را از کاربر میگیرد و آن را با مقدار 17 چک میکند. بهفرض اینکه 17 به هر دلیل یک ورودي نامعتبر باشد، اعتراضی را (از طرف برنامه) ارائه میدهیم:
def inputNumber ():
x = input (‘Pick a number: ‘)
if x == 17:
raise ‘BadNumberError’, ’17 is a bad number’
return x
دستور raise دو آرگومـان دریافـت مـیکنـد: نـوع اعتـراض و اطلاعـات ویـژه دربـارة خطـا. BadNumberError یک نوع جدید اعتراض است که براي این کاربرد ساختهایم. اگر تابعی که inputNumber را فرا خوانده، از بروز خطا پیشگیـري کنـد، برنامـه مـیتوانـد ادامه یابد و در غیر اینصورت پایتون پیغام خطایی را گزارش میکند و خارج میشود:
>> inputNumber ()
Pick a number: 17
BadNumberError: 17 is a bad number
پیغام خطا شامل نوع اعتراض و اطلاعات اضافهاي است که شما تدارك دیدهاید.
برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید