You'll find many answers if you research exception handling for various OOP languages. One language should be enough for diverse material, except perhaps that type safe languages may somewhat de-emphasize type mismatch errors. Research error codes and the built-in exception types (yes, exceptions are actually types in OOP) of mainstream languages such as C++ and C#.