تورفتگی در پایتون نسبت به زبان های دیگر اهمیت بیشتری دارد، به طوری که باعث ایجاد خطا می شود. نحوه برخورد با آن را بیاموزید.
تورفتگی یک جنبه اساسی خوانایی و نگهداری پایتون است. پایتون قوانین سختگیرانهای را برای تورفتگی اعمال میکند و در نتیجه، توسعهدهندگان ممکن است هنگام کار با کدهای دارای تورفتگی نادرست، با خطای “IndentationError: expect an indented block” مواجه شوند.
خطای تورفتگی در پایتون میتواند به شکلهای مختلفی رخ دهد، مانند «IndentationError: انتظار میرود یک بلوک تورفتگی بعد از عبارت «for» وجود داشته باشد که به این معنی است که بعد از یک حلقه for، تورفتگی نامناسبی وجود دارد.
چرا در پایتون خطای Indentation را دریافت می کنید؟
“IndentationError: انتظار یک بلوک تورفتگی” یک خطای رایج است که توسط توسعه دهندگان، به ویژه آنهایی که تازه وارد پایتون شده اند یا در حال انتقال از زبان های برنامه نویسی دیگر هستند، با آن مواجه می شوند.
این خطا اغلب با آن مواجه می شود زیرا پایتون نیاز دارد که کد را در بلوک ها فرورفته کنید. به عبارت دیگر، اگر بلوکهای کد پایتون مانند عبارات if، توابع، کلاسها، حلقهها و غیره را تورفتگی نکنید، در پایتون یک “IndentationError” دریافت خواهید کرد.
پایتون برای هر بلوک کد که به درستی تورفتگی ندارد، یک پیغام خطا کمی متفاوت می دهد.
رفع خطای “IndentationError: انتظار یک بلوک فرورفته” وجود دارد
ساده ترین راه برای رفع خطای IndentationError در پایتون، تورفتگی کد در بلوک ها است. در اینجا نمونه ای از بلوک کد با فرمت نادرست آمده است:
fname = "Gaurav"
lname = "Siyal"
if fname == "Gaurav" and lname == "Siyal":
print("You're Gaurav")
else:
print("You're somebody else")
کد بالا اگر آن را اجرا کنید این خطا را برمی گرداند:
File "tmp.py", line 5
print("You're Gaurav")
^
IndentationError: expected an indented block after 'if' statement on line 4
برای حل “IndentationError انتظار یک بلوک تورفتگی وجود دارد”، باید بلوک های کد را به درستی تورفتگی کنید. برای رفع اشکال کد خود مراحل زیر را دنبال کنید:
- با شناسایی خط کد مشخص شده در پیام خطا شروع کنید و تأیید کنید که عبارت if وجود دارد.
- پس از آن، بررسی کنید که آیا یک تورفتگی مناسب بعد از علامت دو نقطه (:) دارید که معمولاً یک بلوک کد را نشان می دهد. اگر نه، تورفتگی مناسب برای رفع خطا اضافه کنید.
- برای افزودن تورفتگی مناسب، باید بین تعداد ثابتی از فاصله ها یا برگه ها انتخاب کنید. هرگز هر دو را با هم مخلوط نکنید تا از خطاهای تورفتگی بیشتر در پایتون جلوگیری کنید. توصیه می شود همیشه از زبانه ها استفاده کنید.
کد زیر تورفتگی اصلاح شده را با استفاده از تب ها نشان می دهد:
fname = "Gaurav"
lname = "Siyal"
if fname == "Gaurav" and lname == "Siyal":
print("You're Gaurav")
else:
print("You're somebody else")
گاهی اوقات، یک خطا دریافت می کنید که می گوید: “IndentationError: indent unnexpected”. این خطا به این معنی است که شما کد پایتون خود را در جای اشتباهی فرورفته اید. در اینجا یک مثال ساده است:
num = 5
num += 2
کد بالا پیام خطای “IndentationError: indent unnexpected” را برمی گرداند. این به این معنی است که اگرچه ممکن است یک تورفتگی در کار خود داشته باشید، این تورفتگی در یک بلوک کد پایتون نیست. برای رفع این مشکل، به سادگی تورفتگی غیر ضروری را مانند زیر حذف کنید:
num = 5
num += 2
از تورفتگی مناسب ویرایشگر اطمینان حاصل کنید
اکثر ویرایشگرهای متن مدرن از تورفتگی کد خودکار پشتیبانی می کنند. اگر ویرایشگر شما تشخیص دهد که یک خط کد باید تورفتگی داشته باشد، به طور خودکار برگه ها یا فاصله ها را اضافه می کند.
به عنوان مثال، در ویرایشگر کد Spyder – یکی از محبوبترین IDEهای پایتون – میتوانید به گزینههای تورفتگی در زیر ابزارها > ترجیحات > کد منبع دسترسی داشته باشید.
اگر از Vim استفاده میکنید، میتوانید پیکربندی خود را ویرایش کنید و از autoindent و گزینههای مرتبط برای پیکربندی تورفتگی استفاده کنید. به عنوان مثال، در اینجا یک تنظیم رایج وجود دارد:
set autoindent
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
این به طور خودکار با استفاده از چهار فاصله ایجاد می شود.
در حالی که اکثر ویرایشگرهای متن مدرن از تورفتگی کد خودکار پشتیبانی می کنند، توسعه دهندگان باید محتاط باشند زیرا ممکن است برخی موارد مبهم باقی بمانند. تورفتگی مناسب برای خوانایی و سازگاری کد در بین تیم ها بسیار مهم است.
در تصویر بالا، دستور بازگشت نهایی یک سطح از امضای تابع در خط اول فرورفته است. با این حال، اگر مکان نما خود را در انتهای خط ماقبل آخر قرار دهید و Enter را فشار دهید، یکی از دو مورد ممکن است رخ دهد. ویرایشگر شما می تواند مکان نما را قرار دهد:
- دو سطح تورفتگی در، تراز شده با “res =…”
- یک سطح تورفتگی در تراز با “else:”
ویرایشگر شما نمی تواند بین این دو حالت تمایز قائل شود: ممکن است بخواهید کد بیشتری را در بلوک if/else اضافه کنید یا نه.
موارد رایج تورفتگی نامناسب
اگر بیانیه ها
اگر عبارات if خود را به درستی تورفتگی نکنید، پیام خطای “IndentationError: انتظار یک بلوک تورفته پس از بیانیه “if” را دریافت خواهید کرد. در اینجا مثالی از یک دستور if با تورفتگی مناسب آورده شده است:
if my_name == "Gaurav":
print("My name is Gaurav")
کارکرد
توابع بلافاصله پس از اعلام نیاز به تورفتگی دارند. نادیده گرفتن این قانون منجر به یک پیام خطایی می شود که به عنوان “IndentationError: انتظار می رود یک بلوک فرورفته پس از تعریف تابع” باشد. برای جلوگیری از این امر، همیشه توابع خود را به این صورت به درستی تورفتگی کنید:
def magic_number():
result = 42
return result
print magic_number()
برای حلقه ها
حلقههای For معمولاً هر زمان که بلوک کد خود را به درستی تورفتگی نمیکنید، پیام خطای «IndentationError: انتظار میرود یک بلوک فرورفته بعد از عبارت for» ارائه شود. برای جلوگیری از این امر، معمولاً هنگام کدنویسی باید از این فرمت تورفتگی پیروی کنید:
for i in range(10):
print (i)
Docstring بدون فرورفتگی
در تلاش برای حفظ کدهای مستند، ممکن است برخی از رشتههای مستند را در مکانهای ضروری اضافه کنید. باید مطمئن شوید که رشتههای اسناد به درستی تورفتگی دارند، در غیر این صورت در پایتون با یک «IndentationError expected an indented block» مواجه خواهید شد. همیشه مطمئن شوید که کد شما به شکل زیر به درستی تورفتگی دارد:
def do_something():
"""this code does something"""
return True
مدیریت خطای «منتظر بلوک تورفتگی» پایتون
خطاها مانند هر زبان برنامه نویسی دیگری در پایتون یک اتفاق روزمره است. قوانین سختگیرانه پایتون در مورد تورفتگی ممکن است نوع جدیدی از خطا را برای فکر کردن اضافه کند، اما مفید هستند. کدهایی که به درستی فرورفته شده اند در بین تیم ها خواناتر و سازگارتر است.
خطای تورفتگی تنها مشکلی نیست که باید با آن مقابله کنید. این کمک می کند تا با خطاهای رایج پایتون آشنا شوید، بنابراین می دانید چگونه آنها را اشکال زدایی کنید و برای رفع آنها چه کاری باید انجام دهید.