Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Handle an exception

Última atualização: Jun 28, 2026

Conheça os tipos de exceção lançados pelo Alibaba Cloud SDK V2.0 for PHP e saiba como capturar e tratar cada um deles.

O SDK V2.0 for PHP lança três tipos de exceção, cada um com uma causa e uma estratégia de resposta diferentes:

  1. InvalidArgumentException: Um parâmetro obrigatório está ausente ou possui um valor inválido durante a inicialização do cliente do SDK. Visualize os detalhes da exceção na mensagem de erro retornada.

  2. TeaUnretryableException: Um erro de rede persiste após o esgotamento de todas as tentativas de nova tentativa. Chame getLastException para recuperar as informações da requisição da última tentativa.

  3. TeaError: A API retorna um erro de negócio. As propriedades a seguir ajudam a diagnosticar o erro:

    1. code: o código de erro retornado pela API.

    2. message: a mensagem de erro, incluindo o ID da requisição da chamada de API que falhou.

    3. data: detalhes brutos do erro retornados pelo servidor.

O exemplo a seguir captura a classe base \Exception e usa verificações com instanceof para identificar o tipo específico de exceção. Verifique TeaError e TeaUnableRetryError antes do fallback genérico para tratar cada tipo com a resposta adequada.

Importante

O exemplo imprime mensagens de erro apenas para referência. Em produção, não ignore exceções silenciosamente. Registre-as em log, propague-as para uma camada superior ou tente novamente com backoff exponencial, conforme apropriado para cada tipo de exceção.

<?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();

Orientações de resposta

Escolha a resposta apropriada com base no tipo de exceção:

  • **InvalidArgumentException**: Corrija o valor do parâmetro antes de tentar novamente. Este erro indica um equívoco de programação — tentar novamente sem alterar o código não terá sucesso.

  • **TeaUnableRetryError**: Tente novamente após um atraso. Utilize backoff exponencial para evitar sobrecarregar o servidor. Chame getLastException() para registrar a causa raiz antes de fazer uma nova tentativa.

  • **TeaError**: Verifique code e message para determinar a causa. Erros de API, como falhas de autenticação ou recursos ausentes, exigem ações corretivas antes de uma nova tentativa.