✍️ نبود فایل یک وضعیت قابل پیشبینی است، اما نباید با متن خالی اشتباه شود. فایل ممکن است وجود داشته باشد و محتوایش رشته خالی باشد؛ این یک خواندن موفق است. برای نبود فایل در این تمرین 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 داده نمیشود.