خطاهای پایتون – { بررسی برخی از متداول ترین خطاها در python }

مقدمه

در ادامه مجموعه جلسات آموزشی پایتون ، قصد داریم این بار به بررسی خطاهای پایتون بپردازیم. خطاهایی که هر وقت یک برنامه می نویسیم (به خصوص در روزهای اولیه برنامه نویسی) با آنها بسیار زیاد برخورد خواهیم کرد. 

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

نکته : دوستان عزیز ، خواندن این جلسه به تنهایی کافی نمی باشد و یادگیری عمیقی برای شما ایجاد نخواهد کرد. لطفا یک ادیتور باز کنید و تمامی کدهایی که در ادامه جلسه آورده می شوند را خودتان امتحان کنید و گام به گام با آموزش پیش بروید تا تمامی این آموزش ها را یک بار برای همیشه یاد بگیرید. 

خطاهای پایتون – syntax Error

Syntax Error وقتی اتفاق می افتد که شما دستور زبان یک زبان برنامه نویسی رو رعایت نکنید. مثلا پایتون به شما میگه که آخر همه ifها لطفا کالون (:) بذارید. ولی شما آن را قرار نمی دهید. در این حالت با خطای Syntax Error مواجه می شوید. مثلا رایجی دیگر از این موضوع ، قرار ندادن پرانتز برای دستور print در پایتون 3 می باشد. 

در زیر این دو خطا با یک مثال بررسی شده اند : [ihc-hide-content ihc_mb_type=”show” ihc_mb_who=”2,3,4,5″ ihc_mb_template=”4″ ]

 

مثال خطای if : 

a = 2

if a%2 == 0
    b = 0
    

با اجرای کد بالا ، با خطای زیر مواجه خواهیم شد : 

    if a%2 == 0
               ^
SyntaxError: invalid syntax

که میبینید با یک Syntax Error مواجه شده ایم. 

 مثال خطای print : 

خط زیر را در نظر بگیرید: 

print("robouav.rog"

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

    print("robouav.rog"
                       ^
SyntaxError: unexpected EOF while parsing

این خطا هم همان Syntax Error می باشد. 

توجه کنید که هر دو خطای بالا اگر چه Syntax Error می باشد ، اما در باطن با یکدگیر متفاوت هستند. پیغام های خطای هر دو را نگاه کنید. (همین الان نگاه کنید !). پیام خطای if ، نوشته شده است invalid syntax که یعنی syntax نوشته شده توسط شما معتبر نمی باشد. در حالی که پیام مربوط به دستور print  چیز دیگری به ما می گوید: 

“unexpected EOF while parsing”

اما این عبارت به چه معناست ؟ این عبارت به این معنی است که ما به انتهای کد شما رسیده ایم در حالی که بلوک های کد شما هنوز تکمیل نشده اند و نیاز به کامل شدن دارد. مثلا در دستور بالا باید پرانتز مربوط به دستور print را میبستیم که نبسته بودیم. 

به صورت کلی میتوانیم بخش عمده ای از خطاهای مربوط به Syntax Error را در تصویر زیر خلاصه کنیم : 

خطای syntax error در پایتون - بررسی خطاهای پایتون

خطاهای پایتون -IndentationError: expected an indented block

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

یکی از خطاهایی که ممکن است شما با ان برخورد کنید بحث همین تورفتگی هاست. گاهی اوقات پیش می آید که ما یک دستور شرطی مثل if و یا یک حلقه مثل for مینویسیم و پایتون انتظار دارد که بعد از آن دستورها  تو رفتگی مشاهده کند. در حالی که مشاهده نمی کند. در این حالت با خطای Indentation Error مواجه می شود. مثال زیر را ببینید‌:

a = 2
if a ==2:
print("robouav.org")

در کد بالا بعد از دستور if پایتون انتظار تورفتگی را دارد در حالی که این اتفاق نیفتاده است. به همین علت با خطای Indentation Error مواجه می شویم. در واقع اگر کد بالا را اجرا کنیم ، خواهیم داشت : 

    print("robouav.org")
        ^
IndentationError: expected an indented block

خطاهای پایتون :‌IndentationError: unexpected indent

خطایی که در این قسمت معرفی میکنیم ، کمی شبیه به خطای قبلی است. بیابید این خطا را با یک مثال توضیح دهیم. مثال زیر را در نظر بگیرید:‌

a = 2
if a ==2:
    print("robouav.org")
     print("a equal 2")

وقتی برنامه به if میرسد انتظا یک تورفتگی دارد. تو رفتگی خط اول دستور به اندازه ۴ تا space می باشد. تا اینجا برنامه اوکی هست. اما به خط بعد که میرود ، میبینید که میزان تو رفتگی به اندازه ۵ تا space می باشد. به همین علت با خطا روبرو می شود. در واقع انتظار دارد که ما درتمام آن بلوک کد از ۴ تا space استفاده کنیم. بنابراین با اجرای کد بالا نتیجه به صورت زیر خواهد بود: 

   print("a equal 2")
    ^
IndentationError: unexpected indent

همانطور که در بالا نیز مشاهده میکنید ، پایتون به ما می گوید که با میزان Indentation غیر قابل انتظاری روبرو شده است. انتظار پایتون بر ۴ تا space بوده است ، در حالی که با ۵ تا space روبرو شده است. 

خطاهای پایتون – Name Error ‌-

این خطا یکی از ساده ترین خطاهای پایتون می باشد. این خطا وقتی اتفاق می افتد که نامگذاری های ما دچار ایراد باشد. مثلا در ابتدای برنامه متغیری به نام variable تعریف کرده باشیم و هنگام فراخوانی از  ان از نام varibale استفاده کنیم. (به املای دو کلمه دقت کنید.)

همانطور که واضح است بیشترین زمانی که این اتفاق می افتد مربوط به زمانی است که ما املای کلمات را به درستی استفاده نکنیم. برای این بخش به دلیل سادگی بیش از حد مثالی را مطرح نمی کنیم. 

خطاهای پایتون – TypeError: Can’t convert ‘int’ object to str implicitly

TypeError یکی از خطاهایی که دامنه گستردگی زیادی دارد. ما در اینجا بخش کوچکی از این خطارا با یکدگیر بررسی میکنیم. 

بیایید متن خطای بالا را کمی دقیقتر بررسی کنیم : 

[/ihc-hide-content]

“Can’t convert ‘int’ object to str implicitly”

به کمک متن بالا در واقع پایتون به ما می گوید که نمیتواند نوع داده int را به نوع داده str (رشته) تبدیل کند. مثال زیر را ببینید : 

print("hello"+1)

کد بالا می خواهد عبارت hello +1 را در خروجی نمایش دهد. واضح است که hello یک رشته است و 1 یک عدد است. حال چگونه پایتون میخواهد یک عدد را با یک رشته جمع کند‌؟ در جلسه مربوط به رشته ها گفتیم که میتوانیم دو رشته را با یکدگیر جمع کنیم. علاوه بر آن میدانیم که دو عدد را نیز میتوانیم با یکدگیر جمع کنیم. اما یک رشته و یک عدد چطور ؟ این کار را نمیتوانیم انجام دهیم. 

به همین خاطر اگر کد بالا را اجرا کنیم ، با خطای زیر روبرو می شویم‌:

    print("hello"+1)
TypeError: Can't convert 'int' object to str implicitly

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

واضح است که Type Error ها وقتی رخ می دهد که خطاهای مربوط به نوع داده داشته باشیم. خطاهایی که در‌انها استفاده از انواع مختلف داده ها به درستی انجام نگرفته است. 

در پایان این جلسه تمریناتی آورده شده است که به حل آن بسیار تاکید داریم. لطفا پس از انجام تمرینات ، آن ها را در قسمت نظرات بیاورید تا در صورت ایراد تصحیح شود و در صورت صحیح بودن نیز سایر دوستان استفاده کنند. 
تمارین:

سوال ۱‌: یکی دیگر از انواع خطاها ، Value Error می باشد. در مورد این خطا تحقیق کنید و توضیح دهید که در چه مواردی اتفاق می افتند. 

سوال ۲:‌ خط  (print(“hello”+1 را به (print(1+”hello  تغییر دهید و آن را اجرا کنید. با چه خطایی مواجه می شوید؟‌ آیا این خطا همان خطای قبل می باشد‌؟ چه تفاوتی وجود دارد‌؟ علت را توضیح دهید. 

مثل همیشه میتوانید ما را در تلگرام و یا اینستاگرام دنبال کنید: 

 

 

 

اشتراک گذاری:
مطالب زیر را حتما بخوانید

دیدگاهتان را بنویسید