W liniach 29 i 39 masz zmienną $name_user, która nie jest nigdzie zdefiniowana. session_start() daj na sam początek. Walidacja powinna odbywać się w momencie pobierania danych z tablicy $_POST, a nie później. Błędy raczej zapisywałbym do odpowiedniej tablicy, zamiast rzucać non stop wyjątkami. Dlaczego? Choćby dlatego, że jeśli email będzie nieprawidłowy i jednocześnie hasła nie będą się zgadzać, to wyjątki zostaną przechwycone dwa razy, za każdym razem z innym komunikatem błędu. Jeśli zatem użytkownik wszystkie pola wypełni nieprawidłowo, to aż cztery razy otrzyma komunikat błędu, za każdym razem inny, a chyba powinien od razu wiedzieć, które ze wszystkich pól wypełnił źle. Mnie osobiście skłoniłoby to do opuszczenia strony. Blok
try ... catch ... nie jest dobrym pomysłem na walidację danych z formularza.
Radzę zapoznać się z tematem
Jak poprawnie zadać pytanie - są tam zawarte podstawy dotyczące debugowania skryptów, z którymi warto się oswoić.