Code that cannot explicitly deal with certain states should absolutely bail out. There's no other sane option, other than to throw the end user into a debugger.
I never could quite figure out what to do with exceptions in C++, especially since there was a lot of non-exception error-handling baggage from C land. And then how do I know what I need to catch? Do I overload my code with custom exception classes I can throw for every little error? This is likely why people were so opposed to exception handling being proposed for Go. It seems like a mess, right?
But then I started programming in Python and exception handling has become a lot clearer, cleaner, and much less error-prone, if you'll pardon the pun. An exception is, by definition, exceptional: it's not a normal thing. Thus if something exceptional happens that you aren't equipped to deal with, don't catch it. Let it bubble up to the caller who will it if it can, or if not, absolutely crash the program with a trace back. This might sound extreme, but it's very logical. If no function is equipped to deal with the exception, then there's no sane option but to bail out. A program that doesn't know what to do about common disk errors, for example, shouldn't just carry on as if nothing is wrong. Silent failure is worse than crashing. If a program doesn't know how to resolve an error, I don't see what you think it should do.
So in Python, the general rule is to not catch exceptions, unless you are specifically writing code to deal with certain exceptions (a file that's not found, for example). You can't possibly code for all contingencies, nor does it make sense to try.
Raising exceptions is common, but done judiciously. If a bug is the original cause of the exception, one should not catch it and then raise some arbitrary third-party exception. Let the original exception stand for debugging purposes. Be careful and judicious in the custom exceptions your code does choose to raise.
All in all, it's a very productive and logical way of doing exception handling, and if more languages did that, there'd be much less resistance to exceptions because they would make more sense. And software would be more stable and more secure. With this sort of background, I have a hard time understanding (remembering) the resistance to exception handling.
The exceptions in C++ work exactly the same way as in python. You generaly don't want to try/catch most of them.