В процедурном программировании обработка ошибок осуществляется на месте - в результате за if и else зачастую не видно логики. В ООП это вообще всё усугубляется. Поэтому прибегают к исключениям, т.е. позволяют ошибках происходить в блоке кода по своему усмотрению, а затем обрабатывают их скопом в обработчике ошибок. Т.е. мы не ловим зайцев в зале, а ждём их на выходе.