Вы не ловите, потому что пытаетесь поймать \Exception
, но то, что выдается, это \Error
.
Учитывая ваше сообщение об ошибке, я бы сказал, что вы используете PHP> = 7 (Вы должны указать, что обработка ошибок значительно изменилась с версии 5 до версии 7).
В PHP> = 7, большинство фатальных ошибок сообщается не путем возникновения ошибки,но бросая Error
объект .
Таким образом, ваше утверждение можно переписать так:
try {
$a = new ClassNotFindable();
}
catch (\Error $e) {
// do your catching
}
Более того, оба класса Error
и Exception
реализуют Throwable
интерфейс, чтобы вы могли поймать это непосредственно:
<?php
try {
$a = new NotFound();
}
catch (\Throwable $t) {
echo "caught!\n";
echo $t->getMessage(), " at ", $t->getFile(), ":", $t->getLine(), "\n";
}
Вы можете видеть, что он работает здесь .
Это никак не связано с AWS, а простоВещь PHPЕсли бы вы использовали PHP <7, он все равно не был бы перехвачен, но в этом случае, потому что распространенные ошибки не являются исключениями. </p>
Если вы использовали PHP5, чтобы иметь возможность отловить ошибку как исключение, вы 'Мне нужно настроить собственный обработчик ошибок.Пример в руководстве выглядит вполне уместным:
function exception_error_handler($severidad, $mensaje, $fichero, $línea) {
if (!(error_reporting() & $severidad)) {
// Este código de error no está incluido en error_reporting
return;
}
throw new ErrorException($mensaje, 0, $severidad, $fichero, $línea);
}
set_error_handler("exception_error_handler");