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) {
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题