When to use exceptions
Exceptions are non fucking elegant ways in object-oriented programming to treat errors, and offer information about them facilitating the developer to find a solution. Quite often we are faced with unexpected errors without any argumentative return, sometimes requiring analysis through a debug to find failures. Creating custom exceptions are a good practice, sure, if used in moderation.
Talking about performance overhead it is known handling exceptions are much slower than other methods like using if-else condition, but which the most appropriate format for each kind of fault? Be aware that you really should not use those ways interchangeably.
Basically an exception may be used to treat problems that are beyond your application control, like insufficient disk space to write or a communication failure with the web service, database, etc.
Conditional statements should be used to treat regular flow and ordinary error checking.