* Use asserts/panics for bugs.
* Use "error codes/values/enums" for logical conditions (that are errors to the user, not errors to the software)
* Use exceptions for unexpected errors in the execution of the software (normally more or less just resource allocation failures)
Incidentally these people are the best economic citizens because if you give them money they'll spend every cent of it because they need to buy food and energy, use health care and pay rent.
In other words if a rich person gets a million they (if they're sane) spend a fraction of it and put the rest in assets, stock market, property, etc. If you give 1000 poor people each 1000e every cent will go into local economy immediately.