douhuan3448 2017-08-17 04:22
浏览 35
已采纳

异常没有捕获try / catch块

Is there any reason why a try/catch block will not work?

I am calling a method in the Magento2 API inside a try catch block but it doesn't catch the exception and execution stops and I see stack trace.

Here is my code:

        $productModel = $this->productRepository->getById( $pId );

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

The getValue() method causes the exception but my try/catch doesn't catch it.

Here is the stacktrace:

( ! ) 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

I am at a loss here how to tackle this. The API class doesn't have any method to check for a value to avoid the null error and my try/catch block just doesn't work.

Any one know why the try/catch might not be working?

  • 写回答

1条回答 默认 最新

  • dpjtn48868 2017-08-17 04:26
    关注

    The code is not throwing an Exception, it's throwing an Error, that's why you couldn't catch it.

    You can for instance check if $productModel->getCustomAttribute('depart_num') is null first

    if ($productModel->getCustomAttribute('depart_num') !== null) { // do your logic
    

    Alternatively, if you're using PHP 7+ (which I think you are), you can modify what you're catching, since now Errors are catchable:

    catch (\Error $e) {
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度