حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش کار با فایل در پایتون؛ CSV، JSON و گزارش‌گیری

مدیریت FileNotFoundError در پایتون؛ نبود فایل با متن خالی فرق دارد

خط‌های فایل و مسیرها در پایتون؛ داده خالی و فایل گم‌شده · 0٪

✍️ نبود فایل یک وضعیت قابل پیش‌بینی است، اما نباید با متن خالی اشتباه شود. فایل ممکن است وجود داشته باشد و محتوایش رشته خالی باشد؛ این یک خواندن موفق است. برای نبود فایل در این تمرین None می‌دهیم تا مصرف‌کننده بتواند این دو حالت را جدا تشخیص بدهد.

مثلاً اگر تنظیم present=True و متن «گزارش» باشد، اول نمونه فایل ساخته می‌شود و سپس خوانده می‌شود. اگر present نادرست باشد، در همان پوشه موقت هیچ فایل هدفی ایجاد نمی‌کنیم؛ تلاش برای خواندن آن FileNotFoundError می‌دهد و همان خطا را می‌گیریم. همه چیز در یک فراخوانی رخ می‌دهد و هیچ فایل واقعی کاربر لازم نیست.

از try و except FileNotFoundError استفاده کن. لازم نیست همه خطاهای احتمالی را با except خالی بپوشانی؛ اگر رمزگذاری یا منطق کد خراب باشد، پنهان کردن آن مشکل را سخت‌تر می‌کند. خطای رایج، برگرداندن '' هم برای نبود و هم برای فایل خالی یا بررسی مقدار متن به‌جای وجود فایل است. کد اولیه فقط امضای تابع را دارد؛ ساخت نمونه، خواندن و مدیریت نبود را خودت کامل کن.

در این تمرین پایان خط‌های احتمالی ورودی فقط LF یعنی \n، مثل مثال‌ها، هستند؛ ورودی با \r یا \r\n داده نمی‌شود.

فعالیت شما

تابع safe_read(present,text) بولی و رشته می‌گیرد. در پوشه موقت اگر present=True بود missing.txt را با text و UTF-8 بساز؛ در هر دو حالت برای خواندن همان مسیر تلاش کن. متن خوانده‌شده را بده و فقط در FileNotFoundError مقدار None برگردان. safe_read(True,'')='' و safe_read(False,'هرچیز')=None. بیرون پوشه موقت چیزی نخوان. در این تمرین پایان خط‌های احتمالی ورودی فقط LF یعنی \n، مثل مثال‌ها، هستند؛ ورودی با \r یا \r\n داده نمی‌شود.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

import tempfile
from pathlib import Path

def safe_read(present, text):
    # TODO: create the optional fixture, then catch only missing-file errors
    pass