قسمت ۵۷ (کنترل کردن Error با try/except)

بدون ديدگاه

استفاده از try و except

سلام! توی آموزش قبلی دیدیم که Error های مختلف چی هستند و کامل باهاشون آشنا شدیم در این آموزش با try و except آشنا میشیم

توی این آموزش میخوایم ببینیم که چجوری میتونیم اون ها رو کنترل کنیم تا برنامه مون رو خراب نکنیم

چون تا الان اگر برنامه ما به اروری میخورد به طور کامل اجرای اون متوقف میشد

و کد های بعد از خطی که به ارور خورده دیگه اجرا نمیشدند

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

یعنی به برنامه بگیم در طول اجرای این کد اگر به این ارور خوردی:

این کار رو انجام بده

و گر به این ارور خوردی:

این یکی کار رو انجام بده

در پایتون به شدت پیشنهاد میشه که از آموزش امروز استفاده کنید و سعی کنید که ارور هاتون رو بگیرید (catch)

>>> try:
       foobar
>>> except NameError as err:
       print(err)

مثال استفاده از try و except

الان در مثال بالا به مفسر گفتیم که سعی کن (try) دستور foobar رو اجرا کنی

اما چون foobar تعریف نشده به NameError میخوریم

و در خط بعد گفتیم اگر به NameError خوردی (except NameError)

اون ارور رو print کن (except NameError as err و سپس print(err))

name 'foobar' is not defined

همانطور که میبینید اول try اجرا شد و دید که به NameError خورد

و برای همین در except کاری که بهش گفتیم رو انجام داد و ارور رو برای ما نمایش داد

و در این صورت به جای اینکه با NameError برنامه مون متوقف بشه

به جاش برامون Error رو print کرد و در ادامه اگر کدی وجود داشته باشه اون ها رو هم print میکنه

اصلا توصیه نمیشه که از except به طور خالی استفاده کنید

>>> try:
       foobar
>>> except:
       print("Error")

چون در این صورت همه ی انواع Error هارو میگیره (اگر اون نوع Error اتفاق بیوفته)

و ما نمیوتنیم به طور دقیق بقهمیم که چه اروری باعث شده که خط try ما اجرا نشه

و پیشنهاد میشه که حتما نوع Error رو مشخص کنید

>>> try:
       colt
>>> except NameError:
       print("You tried to use a vriable that was never declared!")

به طور مثال فکر کنید میخوایم برنامه ای بنویسیم که وجود یک Key رو در درون دیکشنری بررسی کنه، اگر key موجود بود Value اون رو برگردونه و اگر موجود نبود به جای دادن KeyError به ما None رو برگردونه

>>> def get(d,key):
       try:
           return d[key]
       except:
           return None
mydict={"name":"Reza Sarvani"}
mydict["site"]

الان اگر کد رو اجرا کنم برنامه به ارور میخوره، چون دیکشنری key ای به نام site نداره و به KeyError میخوریم

اما اگر از function مون استفاده کنیم بهمون None برمیگردونه و به ارور نمیخوریم، چون ارور ما توسط except دریافت میشه

>>> print(get("mydict","site"))
None

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

>>> try:
    num = int(input("Please enter a number: ")
>>> except:
    print("Thats not number")
>>> else:
    print("I'M IN THE ELSE")
>>> finally:
    print("RUNS NO MATTER WHAT!")

Esle:

زمانی اجرا میشه که دستور except اجرا نشه، یعنی اگر دستور try اجرا بشه و اروری داخل except نره، دستور else هم اجرا میشه، اما اگر اروری وجود داشته باشه و except اجرا بشه، else دیگه اجرا نمیشه

Finally:

این دستور همیشه اجرا میشه

مهم نیست try اجرا بشه و یا except، دستور درون finally همیشه اجرا میشه

نوشتن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد.