PHP try/catch 块中未捕获除零警告

发布于 2024-11-08 03:14:17 字数 328 浏览 1 评论 0原文

我有这个 PHP 代码。每当 y 变为零时,它就会显示警告而不是捕获异常。我的代码有什么问题吗?

try
{
    return($x % $y); 
    throw new Exception("Divide error..");
}
catch(Exception $e){
    echo "Exception:".$e->getMessage();
}

我收到此警告:

Warning: Division by zero in file.php

catch 块未运行。我做错了什么?

I have this PHP code. Whenever y becomes zero, it shows a warning instead of catching the exception. Is there anything wrong with my code?

try
{
    return($x % $y); 
    throw new Exception("Divide error..");
}
catch(Exception $e){
    echo "Exception:".$e->getMessage();
}

I got this warning:

Warning: Division by zero in file.php

The catch block is not run. What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

缪败 2024-11-15 03:14:17

警告也不例外。异常处理技术无法捕获警告。您自己的异常永远不会抛出,因为您之前总是返回

您可以使用 @ 运算符(如 @($x % $y))抑制警告,但您真正应该做的是确保 $y不会变成0。

即:

if (!$y) {
    return 0; // or null, or do something else
} else {
    return $x % $y;
}

A warning is not an exception. Warnings cannot be caught with exception handling techniques. Your own exception is never thrown since you always return before.

You can suppress warnings using the @ operator like @($x % $y), but what you should really do is make sure $y does not become 0.

I.e.:

if (!$y) {
    return 0; // or null, or do something else
} else {
    return $x % $y;
}
梦里梦着梦中梦 2024-11-15 03:14:17

是的,您正在抛出之前执行return。因此,永远不会执行throw,并且不会抛出或捕获任何异常。

Yes, you are executing the return before the throw. Hence the throw is never executed and no exception is thrown nor caught.

迷雾森÷林ヴ 2024-11-15 03:14:17

这是应该如何完成

$value;

try
{
    $value = $x%$y; 
}
catch(Exception $e){
  throw new Exception("Divide error..");
  echo "Exception:".$e->getMessage();
}

return $value

但是因为如果您想隐藏错误并单独处理它,您会收到警告
您现在可以使用 @ 符号,

$value = @$x%$y;

您可以测试该值并查看它是否具有它所具有的值

this is how it should be done

$value;

try
{
    $value = $x%$y; 
}
catch(Exception $e){
  throw new Exception("Divide error..");
  echo "Exception:".$e->getMessage();
}

return $value

But since you are getting a warning if you want to hide the error and handle it discretely
You can use the @ sign

$value = @$x%$y;

now you can test the value and see if it has the value it has

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文