Это проблема в наследстве PHP, когда Exception не существовало.
Если файла не существует, будет выбрасываться Warning. Их тоже можно отлавливать, на самом деле, вот здесь объясняется как:
stackoverflow.com/questions/1241728/can-i-try-catc...
Но если не хотите заморачиваться, делайте сначала проверку на file_exists, и уже тогда выбрасывайте исключение