کاتلین از استثنائات بررسیشده پشتیبانی نمیکند. این امر مدیریت خطا را ساده و کارآمد میکند، زیرا میتوانید انتخاب کنید که فقط استثنائاتی را مدیریت کنید که بهطور بالقوه قابل بازیابی هستند. و از آنجا که لازم نیست بهطور صریح هر استثنای ممکن را مدیریت کنید، کد شما کمتر بههمریخته میشود و در نتیجه، بیشتر روی هدف اصلی خود متمرکز میماند.
 خرابیهای قابل بازیابی، مشکلاتی هستند که یک توسعهدهنده میتواند از سمت خود به آنها رسیدگی کند. برای مثال، اگر شناسهای که در یک فراخوانی استفاده میشود معتبر نباشد، API یک خطای HomeException با یک پیام invalid data ارسال میکند. سپس توسعهدهنده برنامه میتواند آن شناسه را از حافظه پنهان خود حذف کند یا پیامی مانند "ساختار یافت نشد" را به کاربر نشان دهد.
مثالی از نحوه برخورد با یک خرابی قابل بازیابی:
val result =
   try {
     homeManager.requestPermissions()
   } catch (e: HomeException) {
     PermissionsResult(
       PermissionsResultStatus.ERROR,
       "Got HomeException with error: ${e.message}",
     )
   }
 هر متدی در APIهای Home میتواند یک HomeException ایجاد کند، بنابراین توصیه میکنیم از یک بلوک try-catch برای گرفتن HomeException در تمام فراخوانیها استفاده کنید.
 هنگام مدیریت HomeException ، فیلدهای error.code و error.message آن را بررسی کنید تا متوجه شوید چه مشکلی پیش آمده است. ممکن است کدهای خطای فرعی نیز وجود داشته باشد، بنابراین متد getSubErrorCodes() را فراخوانی کرده و نتیجه را بررسی کنید.
هرگونه خطای مدیریت نشده منجر به از کار افتادن برنامه شما خواهد شد.
 جدول زیر معانی کدهای HomeException را که ممکن است با آنها مواجه شوید، ارائه میدهد:
| کد | معنی | 
|---|---|
 ABORTED | این عملیات معمولاً به دلیل یک مشکل همزمانی مانند خرابی بررسی ترتیبسنج یا لغو تراکنش، لغو شد. | 
 ALREADY_EXISTS | موجودیتی که کلاینت سعی در ایجاد آن داشته است، مثلاً یک فایل یا دایرکتوری، از قبل وجود دارد. | 
 API_NOT_CONNECTED | کلاینت سعی در فراخوانی متدی از یک API داشته که اتصال آن ناموفق بوده است. این اتفاق زمانی رخ میدهد که دستگاه آفلاین باشد یا از API مورد نظر کلاینت پشتیبانی نکند. | 
 CANCELLED | عملیات، معمولاً توسط تماسگیرنده، لغو میشد. | 
 COMMAND_FAILED | دستور اجرا نشد. برای جزئیات بیشتر، کدهای خطای فرعی را بررسی کنید. | 
 CURSOR_WINDOW_NOT_SUPPORTED |  متدی فراخوانی شد که از CursorWindow استفاده میکند، اما CursorWindow یا فعال نیست یا در متن فعلی پشتیبانی نمیشود. | 
 DATA_LOSS | از دست رفتن یا خرابی غیرقابل بازیابی دادهها رخ داده است. | 
 DEADLINE_EXCEEDED | مهلت قبل از اتمام عملیات به پایان رسیده است. برای عملیاتی که وضعیت سیستم را تغییر میدهند، حتی اگر عملیات با موفقیت انجام شده باشد، ممکن است این خطا بازگردانده شود. | 
 DECOMMISSIONING_INELIGIBLE | عملیات از رده خارج کردن دستگاه ناموفق بود زیرا دستگاه واجد شرایط از رده خارج کردن نبود. | 
 FAILED_PRECONDITION |  این عملیات رد شد زیرا سیستم در حالت مورد نیاز برای اجرای عملیات نیست. برای مثال، اگر دستور stop OvenCavityOperationalStateTrait روی فر که از قبل متوقف شده است فراخوانی شود، ممکن است این پیام را دریافت کنید. | 
 INTERNAL | خطاهای داخلی. این بدان معناست که برخی از ثابتهای مورد انتظار سیستم اصلی، دچار مشکل شدهاند. این کد خطا برای خطاهای جدی در نظر گرفته شده است. | 
 INVALID_ARGUMENT | مشتری استدلالی ارائه داده است که خارج از محدوده مقادیر مورد انتظار است. | 
 INVALID_DATA_HOLDER | دارنده داده نامعتبر است. | 
 NOT_FOUND |  یک موجودیت درخواستی، مانند یک فایل یا دایرکتوری، یافت نشد. اگر درخواستی برای کل یک کلاس از کاربران رد شود، مانند یک بهروزرسانی تدریجی ویژگی یا لیست مجاز بدون سند، میتوان از NOT_FOUND استفاده کرد. اگر درخواستی برای برخی از کاربران در یک کلاس از کاربران رد شود، مانند کنترل دسترسی مبتنی بر کاربر، باید از PERMISSION_DENIED استفاده شود. | 
 OUT_OF_RANGE |  این عملیات فراتر از محدودهی مجاز انجام شده است، مانند جستجو یا خواندن فراتر از end-of-file . برخلاف INVALID_ARGUMENT ، این خطا نشان دهندهی مشکلی است که در صورت تغییر وضعیت سیستم، ممکن است برطرف شود. | 
 PERMISSION_DENIED |  فراخواننده مجوز اجرای عملیات مشخص شده را ندارد. PERMISSION_DENIED نباید برای رد شدنهای ناشی از اتمام منابع استفاده شود (برای این خطاها از RESOURCE_EXHAUSTED استفاده کنید). PERMISSION_DENIED نباید در صورتی که فراخواننده قابل شناسایی نباشد استفاده شود (برای این خطاها UNAUTHENTICATED استفاده کنید). این کد خطا به این معنی نیست که درخواست معتبر است یا اینکه موجودیت درخواست شده وجود دارد یا سایر پیششرطها را برآورده میکند. | 
 RESOURCE_EXHAUSTED |  برخی از منابع به اتمام رسیدهاند، شاید به دلیل رسیدن به سهمیه هر کاربر یا اتمام فضای کل سیستم فایل. برای مثال، اگر دستور dispense از DispenseTrait روی یک دستگاه تغذیه حیوانات خانگی فراخوانی شود اما دیگر غذایی در دستگاه باقی نمانده باشد، این خطا ممکن است رخ دهد. | 
 SDK_INITIALIZATION_MISSING_INFO |  SDK بدون تمام اطلاعات مورد نیاز مقداردهی اولیه شده است. برای مثال، اگر کلاینت سعی کند یک TraitFactory برای یک شناسه ویژگی مشخص دریافت کند، اما آن ویژگی هنگام مقداردهی اولیه SDK لحاظ نشده باشد، این خطا رخ میدهد. به بخش مقداردهی اولیه خانه در اندروید مراجعه کنید. | 
 UNAUTHENTICATED | تماسگیرنده قابل شناسایی نیست یا درخواست دارای اعتبارنامههای احراز هویت معتبر نیست. | 
 UNAVAILABLE | سرویس در دسترس نیست. این به احتمال زیاد یک وضعیت گذرا است که میتوان با تلاش مجدد با یک backoff آن را اصلاح کرد. توجه داشته باشید که تلاش مجدد برای عملیات غیر خودتوان همیشه ایمن نیست. | 
 UNIMPLEMENTED | عملیات درخواستی در این سرویس پیادهسازی، پشتیبانی یا فعال نشده است. | 
 UNKNOWN |  خطای ناشناخته. UNKNOWN زمانی ظاهر میشود که یک وضعیت خطا رخ میدهد که نمیتوان آن را با استفاده از هیچ یک از کدهای خطای دیگر طبقهبندی کرد. برای مثال، این خطا ممکن است زمانی بازگردانده شود که مقدار وضعیت دریافتی از یک API خارجی فاقد اطلاعات کافی در مورد علت اصلی باشد. | 
 WRITE_FAILED | اجرای عملیات نوشتن با شکست مواجه شد. برای جزئیات بیشتر، کدهای خطای فرعی را بررسی کنید. |