مرکز آموزش میهن وب هاست

مرکز آموزش میهن وب هاست

رفع خطا EOFError در پایتون

پرینت این مقاله پرینت این مقاله

EOFError مخفف عبارت "End of File Error" می باشد. EOFError در پایتون یک خطای سینتکسی (گرامری) است. این خطا در دو حالت رخ می دهد:

1- زمانی که در آخرین قطعه کد، خطای سینتکسی موجود باشد.

2- زمانی که یک جریان ورودی (input stream) در قطعه کد تعریف شده است و کامپایلر بدون دریافت جریان ورودی مورد نیاز به انتهای فایل می رسد. در ادامه هر دو مورد به صورت کامل توضیح داده خواهد شد. 

1- وجود خطای سینتکسی در انتهای کد

اگر دستور ناقصی در انتهای فایل شما موجود باشد با خطای EOFError مواجه خواهید شد. برای مثال اگر قطعه کد زیر را در یک فایل قرار دهید، با خطای (SyntaxError: unexpected EOF while parsing) همانند تصویر 1 هنگام اجرا در ترمینال مواجه می شوید. EOFError به دلیل عدم وجود "(" در انتهای کد رخ داده است. 

print('hi'

تصویر(1)

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

لازم به ذکر است خطای مذکور زمانی رخ می دهد که قطعه کد فوق، آخرین کد در فایل شما باشد. لذا چنانچه پس از آن کدهای دیگری قرار گیرند، با خطا (SyntaxError: invalid syntax) همانند تصویر 2 روبرو می شوید. 

قطعه کد نمونه:

print('hi'
print('how are u?')
تصویر(2)

2- عدم دریافت جریان ورودی

اگر جریان ورودی مناسب برای توابعی نظیر ()input دریافت نگردد EOFError مشاهده می شود. همچنین در هنگام اجرای حلقه ها (مانند for یا while) اگر پیش از پایان حلقه، تعداد ورودی مورد نیاز به پایان رسد یا موجود نباشد خطای EOFError رخ می دهد. 

جهت مدیریت و بررسی این خطا می توانید از بلوک های try-except استفاده نمایید:

در بخش try قطعه کدی که می بایست اجرا گردد را جایگذاری نمایید و در بخش except نیز کدی که در صورت رخ دادن خطا اجرا می شود را قرار دهید. 

قطعه کد نمونه:

try:
    name = input("Enter your name: ")
    print(name)
except EOFError:
    name = "An EOFError has occurred"
print(f"Hello, {name}!")

در قطعه کد فوق چنانچه جریان ورودی دریافت نشود و اجرا به پایان برسد با خطای EOFError مواجه خواهد شد. برای تست این مورد می توانید هنگام اجرای قطعه کد، کلید ترکیبی ctrl+D را بزنید. 

تصویر(3)

قطعه کد نمونه با while:

while True:
    try:
        line = input("Enter input")
        print(line)
    except EOFError:
        print("EOFError: No input was provided")
        break

قطعه کد فوق خواندن جریان های ورودی را ادامه می دهد تا رشته جریان های ورودی پایان یابد. می توانید هنگام اجرای کد مذکور به جای ارائه ورودی، کلید ترکیبی ctrl+D را بزنید تا EOFError را مشاهده نمایید.

تصویر(4)
5/5 از 1 رای