add exception handle