Estoy tratando de ejecutar este Ejemplo # 1 desde esta página: http://php.net/manual/en/language.exceptions.php
<?php
function inverse($x) {
if (!$x) {
throw new Exception('Division by zero.');
}
return 1/$x;
}
try {
echo inverse(5) . "\n";
echo inverse(0) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
// Continue execution
echo "Hello World\n";
?>
Sin embargo, en lugar de la salida deseada, obtengo:
0.2
Fatal error: Uncaught exception 'Exception' with message 'Division by zero.'
in xxx:
7 Stack trace: #0 xxx(14): inverse(0) #1 {main} thrown in xxx on line 7
El entorno de desarrollador que estoy usando es UniServer 3.5
conPHP 5.2.3
Respuestas:
Acabo de tener este problema exacto en el que parecía que incluso había copiado el nombre de la excepción y, sin embargo, no lo capté. Resultó que fue mi estúpido error, pero pensé que debería publicar mi caso aquí en caso de que haya alguien más en la misma situación.
Tenía mi excepción en mi espacio de nombres llamado A y el guión estaba en un espacio de nombres llamado B . El problema era que tenía A \ MyException que es igual (en PHP) \ B \ A \ MyException (¡porque mi script está en el espacio de nombres llamado B !). Todo lo que tuve que hacer para solucionarlo fue agregar una barra invertida (o como se llame) al nombre de la excepción para que se vea así: \ A \ MyException
fuente
catch (\Exception $e)
. Sin la barra invertida,Exception
es específico del espacio de nombres y no se comparará (ni se capturará).Pregunta bastante vieja, todavía ...
También tuve este problema (y así fue como encontré esta publicación) pero un simple experimento me permitió encontrar la solución. Intente cambiar
Exception
a\Exception
. ¡Trabajó para mi!EDITAR:
Como señaló sivann en los comentarios, usar el espacio de nombres debería hacer lo mismo. Así que simplemente ponlo
use \Exception as Exception;
antes de tu declaración de clase.fuente
use Exception;
debería hacerloTratar de poner
catch(\Exception $e)
lugar decatch(Exception $e)
. Si está utilizando un código que no conoce muy bien o, especialmente, si está utilizando un marco, podría anular la excepción de PHP predeterminada con una propia y, por lo tanto, podría ir a la ruta incorrecta y obtener el resultado no deseado. Si acaba de poner\Exception
, entonces está seguro de que está detectando la excepción básica de PHP.fuente
No puede usar los típicos bloques try {} catch {} en PHP como podría hacerlo en otro lenguaje como C # (Csharp).
Si haces esto:
No verá el mensaje "¡Entendido!" mensaje nunca. ¿Por qué? Es solo porque PHP siempre necesita una excepción para ser "lanzada". Debe configurar su propio controlador de errores y lanzar una excepción con él.
Ver función set_error_handler : http://php.net/manual/es/function.set-error-handler.php
fuente
$number = 5/0;
no genera una excepción.$number
está configurado para serINF
.Sin embargo, mi inicial es que tiene un error tipográfico en el nombre de la excepción que está capturando / lanzando, pero si su código es exactamente el mismo, no estoy seguro de qué está pasando exactamente.
Pruebe la siguiente modificación del script original y pegue los resultados. Ayudará a diagnosticar su problema un poco mejor.
fuente
Tuve el mismo problema con las siguientes configuraciones,
PHP 5.2.14 (cli) (construido: 12 de agosto de 2010 17:32:30) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies con eAccelerator v0.9.5. 1 , Copyright (c) 2004-2006 eAccelerator, por eAccelerator
La solución es desactivar eAccelerator o actualizarlo. Probé ambos y ambos arreglos funcionaron. El error se informa aquí https://eaccelerator.net/ticket/242 (NB. Firefox se queja de su certificado SSL).
Ahora estoy ejecutando try catch correctamente con las siguientes configuraciones,
PHP 5.2.4 (cli) (construido: 16 de octubre de 2007 09:13:35) Copyright (c) 1997-2007 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies con eAccelerator v0.9.6. 1 , Copyright (c) 2004-2010 eAccelerator, por eAccelerator
fuente
\ La excepción no me funciona, pero encontré una solución.
Necesitaba reemplazar try {} catch (Exception $ e) {} por try {} catch (Throwable $ e) {}.
Para obtener más información: https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/
fuente
en Xdebug hay una configuración:
Esto forzará a php a generar excepciones incluso en un bloque try catch. Convierte esto en
0
fuente
Si está utilizando PHP 7, es posible que necesite Throwable en lugar de Exception
fuente
¿Quizás intente deshabilitar ciertas extensiones de terceros que podría haber instalado? http://bugs.php.net/bug.php?id=41744
fuente
TLDR; asegúrese de tener
use Exception;
en la parte superior de ambos archivos phpfuente
Yo también estoy experimentando esto. Leí un comentario de Rowinson Gallego en el que se debe lanzar una excepción. Entonces modifiqué mi código de:
dentro :
Funciona.
fuente