PHP:尝试/捕获失败
Posted
技术标签:
【中文标题】PHP:尝试/捕获失败【英文标题】:PHP: try/catch fail 【发布时间】:2014-01-24 06:29:10 【问题描述】:我正在使用 php 5.4.16 运行 WAMSERVER 2.4(32 位),这是一个 Laravel 3 项目。
在我预计会失败的try
块中,我提交了一个重复行以针对唯一性约束进行插入。
它没有处理catch
中的异常,而是从try
块中抛出“未处理的异常” 错误并失败。
// This throws an error if the relationship already exists.
// If that happens, just pass it to the logger and move on.
try
$entity->$pivotMethod()->attach( $rowData->get_key(), $ext );
catch (Exception $e)
$err = $e->getMessage()."\n";
error_log($err);
这是它抛出的错误: 未处理的异常
消息:
SQLSTATE[23000]:完整性约束违规:1062 键“唯一”的重复条目 '695d7f0b-53b8-11e3-93fc-c12677e410a5-0-0-14-'
SQL:INSERT INTO
person_contact
(person_uuid
,phone_id
) 值 (?, ?) 绑定:数组(0 => '695d7f0b-53b8-11e3-93fc-c12677e410a5', 1 => 14)位置:C:\path\to\laravel\3_2_13\database\connection.php 263行
【问题讨论】:
如果没有抛出异常,它将永远不会到达 catch 块 +1 是的!你必须抛出异常 您上面的块是否在命名空间内的类中? 试试\Exception
而不是Exception
做到了(命名空间)!谢谢@Machavity 和#DanFromGermany .. 你们太聪明了:)
【参考方案1】:
根据您的评论,这是您的问题
namespace Something;
class myClass
function method()
try
$entity->$pivotMethod()->attach( $rowData->get_key(), $ext );
catch (Exception $e)
$err = $e->getMessage()."\n";
error_log($err);
在这种情况下,您输入提示您正在捕获异常,但您没有指定范围,因此 PHP 假设您正在捕获 \Something\Exception
修复非常简单。添加 \
告诉 PHP 捕获任何是或扩展基 Exception
类的内容
catch (\Exception $e)
【讨论】:
+1 我希望你不只是从 cmets 那里得到这个答案,DanFromGermany 首先发现了它 :) 我知道这个解决方案是因为几个月前我遇到了同样的问题,但他的猜测首先出现了 您的块在命名空间内的类中吗?欢迎您 不,这就是为什么我问它是否在命名空间中。我以前遇到过这种类型的问题。当你这样输入提示时,PHP 会变得非常具体。除非您知道自己将捕获特定类型的异常,否则最好使用\Exception
以上是关于PHP:尝试/捕获失败的主要内容,如果未能解决你的问题,请参考以下文章
为啥 XCUITest 在 Xcode 11.4.1 中捕获的流失败