в части cli-приложений сепарация ошибок и ситуаций обычно позволяет дать лучший фидбек от программы. Когда она вылетает, то сразу ясно почему - потому что файла нет, потому что это не файл, или потому что файл есть и это файл, но прочитать его невозможно, либо же все нормально, но ошибка чтения и т.п. Соответственно, исправлять ошибки намного быстрее и удобнее, чем в случае очень общего текста ошибки "какая-то проблема с файлом %s". Конечно, полные проверки каждого случая сильно зашумляют код и скорее они актуальны только для важных файлов, пути к которым передаются через cli и т.п.