Todos los productos
Search
Centro de documentos

Alibaba Cloud SDK:Handle an exception

Última actualización: Sep 05, 2026

Conozca los tipos de excepción que lanza Alibaba Cloud SDK V2.0 para PHP y cómo capturar y gestionar cada uno.

SDK V2.0 para PHP lanza tres tipos de excepción. Cada uno tiene una causa distinta y requiere una estrategia de respuesta diferente:

  1. InvalidArgumentException: falta un parámetro obligatorio o su valor no es válido al inicializar el cliente del SDK. Consulte los detalles de la excepción en el mensaje de error devuelto.

  2. TeaUnretryableException: persiste un error de red después de agotar todos los intentos de reintento. Llame a getLastException para obtener la información de la solicitud del último intento.

  3. TeaError: la API devuelve un error de negocio. A continuación se muestran las propiedades que ayudan a diagnosticar el error:

    1. code: código de error que devuelve la API.

    2. message: mensaje de error, que incluye el ID de la solicitud de la llamada a la API con errores.

    3. data: detalles sin procesar del error que devuelve el servidor.

El siguiente ejemplo captura la clase base \Exception y usa comprobaciones con instanceof para identificar el tipo específico de excepción. Compruebe TeaError y TeaUnableRetryError antes de recurrir al caso genérico. Así gestionará cada tipo con la respuesta adecuada.

Importante

El ejemplo imprime mensajes de error únicamente como referencia. En producción, no ignore las excepciones de forma silenciosa. Regístrelas, propáguelas a una capa superior o reintente con retroceso exponencial, según corresponda a cada tipo de excepción.

<?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) {
                // Handle exceptions with caution in your actual business scenario and do not ignore exceptions in your project. In this example, error messages are printed for reference only. 
                print_r("message:" . $error->getMessage() . "\n");
                print_r("code:" . $error->getCode() . "\n");
                print_r($error->data);
            } elseif ($error instanceof TeaUnableRetryError) {
                // Handle exceptions with caution in your actual business scenario and do not ignore exceptions in your project. In this example, error messages are printed for reference only. 
                print_r($error->getLastException());
            } else {
                // Handle exceptions with caution in your actual business scenario and do not ignore exceptions in your project. In this example, error messages are printed for reference only. 
                print_r("message:" . $error->getMessage());
            }
        }
    }
}
ProxyDemo::main();

Guía de respuesta

Elija la respuesta adecuada según el tipo de excepción:

  • **InvalidArgumentException**: corrija el valor del parámetro antes de reintentar. Este error indica un problema de programación, por lo que reintentar sin modificar el código no funcionará.

  • **TeaUnableRetryError**: espere un momento y reintente. Utilice retroceso exponencial para evitar sobrecargar el servidor. Llame a getLastException() para registrar la causa raíz antes de reintentar.

  • **TeaError**: revise code y message para determinar la causa. Los errores de la API, como fallos de autenticación o recursos faltantes, requieren acciones correctivas antes de reintentar.