پیغام خطای EOL در پایتون چیست؟

امیرحسین بیگدلو 12 ماه قبل

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

 

وقتی مفسر پایتون هر خط کد را اسکن می‌کند و چیزی غیرعادی پیدا می‌کند، خطایی به نام خطای نحوی(Syntax Error) ایجاد می‌کند. خطای نحوی که قرار است در این مقاله بررسی کنیم ارور EOL پایتون است.

 

ویدیو پیشنهادی: توضیح مدیریت خطاها در پایتون

 

 #  ارور EOL پایتون چیست؟

ما نمی توانیم مشکلی را حل کنیم مگر اینکه آن را به طور موثر درک کنیم. EOL مخفف "End of Line" است. این خطا به این معنی است که مفسر پایتون زمانی که سعی کرد رشته را اسکن کند به انتهای خط رسیده است.

 

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

 

# String value
s = "This is a string literal...
 
# Printing the string 
print(s)

 

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

  File "EOL.py", line 2
    s = "This is a string literal...
                                   ^
SyntaxError: EOL while scanning string literal

 

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

 

اکنون که مشکل را درک کردیم، اجازه دهید به نمونه هایی نگاه کنیم که در هنگام اجرای کد پایتون می تواند ظاهر شود.

 

مقاله پیشنهادی:‌ مدیریت خطای KeyError در پایتون

 

 #  چطور ارور EOL پایتون را حل کنیم؟

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

 

 

 +  قرار ندادن کوتیشن پایانی

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

 

راه حل ساده این است که به سینتکس احترام بگذاریم و علامت های نقل قول پایانی را قرار دهیم:

# Solution #1
 
# Place the ending quotation mark
s = "This is a string literal..."
 
# Printing the string 
print(s)

 

 

 +  استفاده از کوتیشن نادرست

پایتون از  ' '  و  " "   برای محصور کردن رشته ها استفاده میکند. گاهی اوقات برنامه نویسان از همتای نقل قول نادرست برای پایان دادن به مقدار رشته استفاده می کنند.

 

# Situation #2
 
# Incorrect ending quotation mark
s = "This is a string literal...'
 
# Printing the string 
print(s)

 

درست است که در انتهای رشته از نقل قول استفاده کرده ایم اما پایتون انتظار دارد که از همان علامت نقل قولی استفاده کنید که در ابتدا رشته استفاده کردید.

 

#       Solution #2
 
# Match the quotation marks
s = "This is a string literal..."
 
# Printing the string 
print(s)

 

 

 +  استفاده نادرست از رشته های چند خطی

بسیاری از برنامه نویسان مبتدی پایتون این اشتباه را مرتکب می شوند و یک رشته را در چند خط ایجاد میکنند. پایتون یک خط جدید را به عنوان انتهای عبارت در نظر می گیرد، برخلاف C++ و جاوا که «;» را در نظر می گیرند.

 

#       Situation #3
 
# String extending to multiple lines
s = "This is a string literal...
          Going to the next line"
 
# Printing the string 
print(s)

 

در ابتدا ممکن است کد درست به نظر برسد، اما به محض شروع خط جدید، مفسر پایتون به آن دستور پایان می‌دهد و خطای محصور نکردن رشته را ایجاد می‌کند.

 

در این حالت دو راه حل دارید. اول استفاده از n\ برای ایجاد کردن یک خط جدید است:

#       Solution #3.1
 
# Using the escape sequences \n -> Newline
s = "This is a string literal... \n Going to the next line"
 
# Printing the string 
print(s)

 

دوم استفاده از docstring است. با استفاده از این روش میتوانید یک رشته را در چند خط ایجاد کنید:

#       Solution #3.2
 
# Using triple quotation marks 
s = """This is a string literal...
          Going to the next line"""
 
# Printing the string 
print(s)

 

 

 +  استفاده از بک اسلش قبل از کوتیشن پایانی

علامت  مسئول بی معنی کردن کاراکترهاست و ممکن است باعث بروز خطا شود:

#       Situation #4
 
# Storing a directory path 
s = "\home\User\Desktop\"
 
# Printing the string 
print(s)

 

در کد بالا میخواهیم که علامت backslash را در رشته داشته باشیم اما آخرین backslash باعث بی معنی شدن کوتیشن پایانی میشود و در این حالت به نظر میرسد که رشته بسته نمیشود. برای حل این مشکل میتوانید با یک علامت بک اسلش دیگر، علامت های بک اسلش را بی معنی کنید:

#       Solution #4
 
# Storing a directory path 
s = "\\home\\User\\Desktop\\"
 
# Printing the string 
print(s)

 

مطالب مشابه



مونگارد