Это совсем не плохая идея. Если возникает исключительная ситуация, для ее обработки следует создать исключение, особенно если вы разрабатываете код, который могут использовать другие, могут получить неверный ввод и т. Д.
Это плохая идея использовать исключения, когда они не являются абсолютно необходимыми, например, ситуации, которые можно восстановить с помощью обычных проверок в коде или как часть нормального выполнения, поскольку с ними связано много накладных расходов. Я предполагаю, что именно здесь вы, возможно, поняли, что они вообще плохая идея. Но для того, что они должны делать (отмечая исключительную ситуацию, которую ваш код не может обработать), они абсолютно лучший инструмент.
И если вы создаете пользовательские исключения для кода, который могут использовать другие, документируйте, что они из себя представляют и что они значат. Таким образом, впоследствии пользователи вашего кода будут знать, что они возможны, и что они означают, если они возникнут, и могут обращаться с ними соответствующим образом.