Why use exceptions
Exceptions are used to indicate that something wrong has happened during the execution of code.
Not always you need to handle the exception where something exceptional happened. In this case you throw the exception to the caller.
Generally is possible to use standard existing exceptions to handle most of cases.
Why use a custom exception
If you are developing a library that can be used by others you can leave the responsability to handle the exception to the user of the library.
In this case already existing exceptions sometime are not the best solution to explain what kind of exception has been thrown. So it is necessary to create a custom exception.
If you are working in a project with other people you can do the same. Create an exception explaining what happened and leave who use your functions to handle them as needed.