全部产品
Search
文档中心

阿里云SDK:异常处理

更新时间:Jul 02, 2024

本文为您介绍V2.0 PHP SDK中的异常类型。

V2.0 SDK将异常的种类进行了一定的细分,主要细分为以下几个:

  1. InvalidArgumentException:该异常通常在初始化客户端时,没有填写必填参数或是填写的参数类型不匹配的情况下抛出,可通过查看异常的message来定位错误信息。

  2. TeaUnretryableException:该异常主要是因为网络问题造成,一般是网络问题造成达到最大重试次数后抛出,可以通过getLastException来查询错误发生时的请求信息。

  3. TeaError:在SDK的请求中主要以业务报错为主的异常,该异常的示例中提供了三个参数,为用户排查问题提供帮助:

    1. code: OpenAPI业务报错的错误码。

    2. message: OpenAPI业务报错的错误信息,其中会包含本次请求的RequestId。

    3. data: OpenAPI报错后服务端返回的详细信息。

重要

示例中仅做打印展示。请重视异常处理,切勿在项目中直接忽略异常。建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。

<?php

require_once 'vendor/autoload.php';
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeInstancesRequest;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;

class ProxyDemo
{


    public static function main()
    {
        try {
            $config = new Config([
                "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                "endpoint" => "ecs.cn-beijing.aliyuncs.com", // <endpoint>
            ]);
            $client = new Ecs($config);

            $runtime = new RuntimeOptions([]);
            $describeInstancesRequest = new DescribeInstancesRequest([
                "regionId" => "cn-beijing"
            ]);
            $resp = $client->describeInstancesWithOptions($describeInstancesRequest, $runtime);
            var_dump($resp);
        } catch (\Exception $error) {
            if ($error instanceof TeaError) {
                // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                print_r("message:" . $error->getMessage() . "\n");
                print_r("code:" . $error->getCode() . "\n");
                print_r($error->data);
            } elseif ($error instanceof TeaUnableRetryError) {
                // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                print_r($error->getLastException());
            } else {
                // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                print_r("message:" . $error->getMessage());
            }
        }
    }
}
ProxyDemo::main();