Exception handling in Drupal
Exceptions are handled by FinalExceptionSubscriber, unless there is a more specific exception subscriber handling it before.
Core defines several of them, which are listed here: 27 uses of GetResponseForExceptionEvent
How default exceptions are handled
When you throw an exception in code
throw new \exception('ID ' . $id . ' not found in table xyz!');
the default exception handler returns a 500 http status code with this standard message:
The website encountered an unexpected error. Please try again later.
If you enable error reporting (admin/config/development/logging) you get a more verbose exception message displayed on screen:
The website encountered an unexpected error. Please try again later.
Exception: ID abc not found in table xyz! in Drupal\mymodule... (line 123 of modules/custom/mymodule/src/....php).
Conclusion
Now, what you want to do depends on how much information you want to disclose to the public. Often if you don't find the data you are looking for a 404 exception is more meaningful than a 500 exception. If none of the core exception handling fits your purpose you can implement a custom exception subscriber: