首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在try/catch块中未捕获异常

在try/catch块中未捕获异常
EN

Stack Overflow用户
提问于 2017-08-17 12:22:43
回答 1查看 3.6K关注 0票数 1

是否有任何原因导致try/catch块无法工作?

我在try catch块内的Magento2应用程序接口中调用了一个方法,但它没有捕获异常,执行停止,我看到了堆栈跟踪。

下面是我的代码:

代码语言:javascript
运行
复制
        $productModel = $this->productRepository->getById( $pId );

        $debpt = "";
        try{
            $debpt = $productModel->getCustomAttribute('depart_num')->getValue();
        }
        catch(\Exception $ex){
            $debpt = $ex->getMessage();
        }

getValue()方法导致了异常,但是我的try/catch没有捕捉到它。

下面是堆栈跟踪:

代码语言:javascript
运行
复制
( ! ) Fatal error: Uncaught Error: Call to a member function getValue() on null in /var/www/nwl/app/code/Raleigh/CustomReports/Controller/Report/Generate.php on line 118
( ! ) Error: Call to a member function getValue() on null in /var/www/nwl/app/code/Raleigh/CustomReports/Controller/Report/Generate.php on line 118
Call Stack
#   Time    Memory  Function    Location
1   0.0093  383800  {main}( )   .../index.php:0
2   1.2357  12558448    Magento\Framework\App\Bootstrap->run( ??? ) .../index.php:39
3   1.2362  12560232    Magento\Framework\App\Http->launch( )   .../Bootstrap.php:258
4   2.3292  22376480    Magento\Framework\App\FrontController\Interceptor->dispatch( ??? )  .../Http.php:135
5   2.3302  22464168    Magento\Framework\App\FrontController\Interceptor->___callPlugins( ???, ???, ??? )  .../Interceptor.php:26
6   2.3302  22467712    Infortis\Cgen\Plugin\Magento\Framework\App\FrontController->aroundDispatch( ???, ???, ??? ) .../Interceptor.php:142
7   2.3305  22469480    Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}( ??? )  .../FrontController.php:32
8   2.3305  22469856    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Interceptor.php:138
9   2.3313  22499968    Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch( ???, ???, ??? )  .../Chain.php:67
10  2.3314  22501304    Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}( ??? )   .../BuiltinPlugin.php:68
11  2.3314  22501680    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Chain.php:63
12  2.3315  22504744    Magento\PageCache\Model\App\FrontController\VarnishPlugin->aroundDispatch( ???, ???, ??? )  .../Chain.php:67
13  2.3315  22504744    Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}( ??? )   .../VarnishPlugin.php:55
14  2.3315  22505120    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Chain.php:63
15  2.3318  22517640    Magento\Framework\Module\Plugin\DbStatusValidator->aroundDispatch( ???, ???, ??? )  .../Chain.php:67
16  2.4050  22671616    Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}( ??? )   .../DbStatusValidator.php:69
17  2.4050  22671992    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Chain.php:63
18  2.4053  22677224    Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch( ???, ???, ??? )   .../Chain.php:67
19  2.4067  22697128    Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}( ??? )   .../RequestPreprocessor.php:94
20  2.4067  22697504    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Chain.php:63
21  2.4067  22697544    Magento\Framework\App\FrontController\Interceptor->___callParent( ???, ??? )    .../Chain.php:70
22  2.4067  22697544    Magento\Framework\App\FrontController\Interceptor->dispatch( ??? )  .../Interceptor.php:74
23  2.6148  27411640    Raleigh\CustomReports\Controller\Report\Generate\Interceptor->dispatch( ??? )   .../FrontController.php:55
24  2.6158  27438408    Raleigh\CustomReports\Controller\Report\Generate\Interceptor->___callPlugins( ???, ???, ??? )   .../Interceptor.php:26
25  2.6303  29018384    Magento\Tax\Model\App\Action\ContextPlugin->aroundDispatch( ???, ???, ??? ) .../Interceptor.php:142
26  2.6303  29018384    Raleigh\CustomReports\Controller\Report\Generate\Interceptor->Magento\Framework\Interception\{closure}( ??? )   .../ContextPlugin.php:91
27  2.6303  29018760    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Interceptor.php:138
28  2.6367  30050392    Magento\Weee\Model\App\Action\ContextPlugin->aroundDispatch( ???, ???, ??? )    .../Chain.php:67
29  2.6367  30050392    Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}( ??? )   .../ContextPlugin.php:112
30  2.6367  30050768    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Chain.php:63
31  2.6368  30052808    Magento\Store\App\Action\Plugin\StoreCheck->aroundDispatch( ???, ???, ??? ) .../Chain.php:67
32  2.6368  30052808    Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}( ??? )   .../StoreCheck.php:44
33  2.6368  30053184    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Chain.php:63
34  2.6369  30055776    Magento\Customer\Model\App\Action\ContextPlugin->aroundDispatch( ???, ???, ??? )    .../Chain.php:67
35  2.6372  30081328    Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}( ??? )   .../ContextPlugin.php:61
36  2.6372  30081704    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Chain.php:63
37  2.6373  30085880    Magento\Store\App\Action\Plugin\Context->aroundDispatch( ???, ???, ??? )    .../Chain.php:67
38  2.6448  30193896    Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}( ??? )   .../Context.php:106
39  2.6448  30194272    Magento\Framework\Interception\Chain\Chain->invokeNext( ???, ???, ???, ???, ??? )   .../Chain.php:63
40  2.7299  30787752    Raleigh\CustomReports\Controller\Report\Generate\Interceptor->___callParent( ???, ??? ) .../Chain.php:70
41  2.7299  30787752    Raleigh\CustomReports\Controller\Report\Generate\Interceptor->dispatch( ??? )   .../Interceptor.php:74
42  2.7385  31511040    Raleigh\CustomReports\Controller\Report\Generate\Interceptor->execute( )    .../Action.php:102

我在这里不知道如何解决这个问题。API类没有任何方法来检查值以避免null错误,并且我的try/catch块就是不起作用。

有人知道为什么try/catch可能不起作用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-17 12:26:44

代码不是抛出Exception,而是抛出Error,这就是你无法捕获它的原因。

例如,您可以先检查$productModel->getCustomAttribute('depart_num')是否为null

代码语言:javascript
运行
复制
if ($productModel->getCustomAttribute('depart_num') !== null) { // do your logic

或者,如果你正在使用PHP 7+ (我想你也是),你可以修改你正在捕获的东西,因为现在是Errors are catchable

代码语言:javascript
运行
复制
catch (\Error $e) {
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45726543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档