Whenever an exception occurs in PL/SQL it will break out to the nearest surrounding exception handler. Execution continues from there (in your case, to the end of the procedure).
This may point you in the right direction....
PROCEDURE test ....
... do some processing
SELECT x INTO fred
FROM table WHERE y = 'abc';
WHEN NO_DATA_FOUND THEN fred := NULL;
WHEN OTHERS THEN RAISE;
EXCEPTION WHEN ....
An error occurred other than that in the select statement.
You can next exception blocks as deep as you like. This allows you to deal with exceptions which you want to can/want to deal with and propogate the others to an outer exception handler which may do logging etc.