it's totally okay to use exceptions for error handling
it depends on how you're using abstractions. e.g. EAFP in Python
there are very few dogmas in software engineering - as the best architecture always depends on the operating context, environment and constraints