Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Perguntas frequentes sobre o SDK para Python

Última atualização: Jun 28, 2026

Este tópico responde a perguntas frequentes sobre o SDK da Alibaba Cloud para Python e ajuda a melhorar a eficiência do desenvolvimento.

Pré-requisitos

  • Python 3,7 ou posterior instalado.

  • Acesso às APIs da Alibaba Cloud pela sua rede.

Visão geral

Problemas e soluções

Como lidar com erros de AccessKey?

Problema: O código retorna a seguinte mensagem de erro após a execução, indicando configuração incorreta do par de AccessKeys.

  • Alibaba Cloud SDK V2.0: AttributeError: 'NoneType' object has no attribute 'get_access_key_id'.

  • Alibaba Cloud SDK V1.0: Error:MissingParameter The input parameter "AccessKeyId" that is mandatory for processing this request is not supplied.

Soluções:

  1. Execute os comandos a seguir para verificar se as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET estão configuradas.

    Linux/macOS

    echo $ALIBABA_CLOUD_ACCESS_KEY_ID
    echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

    Windows

    echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
    echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

    Se um par de AccessKeys válido for retornado, as variáveis de ambiente estarão configuradas corretamente. Caso nenhum par de AccessKeys ou um par inválido seja retornado, configure as variáveis de ambiente conforme necessário. Para mais informações, consulte Configurar variáveis de ambiente no Linux, macOS e Windows.

  2. Verifique se há erros relacionados ao par de AccessKeys no código.

    Exemplo de solicitação com erro:

     config = open_api_models.Config(
                access_key_id=os.environ['yourAccessKeyID'],
                access_key_secret=os.environ['yourAccessKeySecret']
            )

    Exemplo de solicitação bem-sucedida:

     config = open_api_models.Config(
               access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
               access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
            )
    Nota

    os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] e os.environ("ALIBABA_CLOUD_ACCESS_KEY_SECRET") indicam que o AccessKey ID e o AccessKey secret são obtidos das variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET.

    Importante

    Para evitar riscos de segurança, não inclua o par de AccessKeys diretamente no código de produção.

O que fazer se a instalação do SDK falhar?

  • Certifique-se de ter instalado uma versão válida do Python, como Python 3.x.

  • Adicione a opção --upgrade ao instalar o SDK com um comando pip para garantir a instalação da versão mais recente.

pip install --upgrade <SDK_NAME>  
  • Em caso de problemas de permissão durante a instalação, como ao instalar o SDK no diretório do sistema de bibliotecas Python, use a opção --user para instalar o SDK no diretório do usuário em vez do diretório do sistema.

pip install --user <SDK_NAME>  
  • Se houver várias versões do Python instaladas no computador, instale o SDK na versão do Python em uso. Por exemplo, use python3 em vez de python no código e execute comandos pip3.

O que fazer se a importação de um módulo falhar e o erro ModuleNotFoundError for relatado?

Certifique-se de que o SDK esteja instalado corretamente e tente importar um módulo no ambiente Python.

  • Inicie o interpretador Python.

python
  • Importe um módulo.

import <SDK_NAME> 

Se nenhum erro ocorrer, o SDK está instalado corretamente. Se o erro ModuleNotFoundError ou ImportError ocorrer, o SDK não foi instalado adequadamente.

pip install <SDK_NAME>

O que fazer se a mensagem de erro "AttributeError: 'CredentialModel' object has no attribute 'provider_name'" for retornada?

Essa mensagem indica uma tentativa de acessar o atributo provider_name inexistente do objeto CredentialModel. Geralmente, esse erro é causado por um pacote alibabacloud_credentials desatualizado, resultando em incompatibilidade entre a biblioteca de classes e as operações de API de compilação. Possíveis causas:

  • Pacote de dependência desatualizado: A versão do pacote alibabacloud_credentials é anterior à exigida pelo atributo provider_name no código.

  • Conflitos de dependência: A versão incorreta do alibabacloud_credentials é carregada devido à existência de vários pacotes alibabacloud_credentials no projeto.

  • Atualização incorreta de dependência: Após uma atualização, a dependência não foi reinstalada ou o cache não foi limpo, mantendo a versão anterior em uso.

Soluções:

  1. No arquivo requirements.txt, defina o pacote de dependência alibabacloud_credentials para a versão mais recente. Exemplo:

    alibabacloud_credentials=1.0.1

    Execute o comando pip install -r requirements.txt --upgrade para atualizar o pacote de dependência.

    Nota

    Consulte ChangeLog.txt para obter uma lista de todas as versões lançadas do alibabacloud_credentials.

  2. Verifique se há conflitos de dependência.

    pip list | grep alibabacloud
    # If multiple dependency versions exist, uninstall the existing versions and install the latest version. Example: 
    pip uninstall alibabacloud_credentials
    pip install alibabacloud_credentials==1.0.1
    
  3. Limpe o cache e reinstale a versão mais recente.

    pip cache purge
    pip install -r requirements.txt --force-reinstall
    

O que fazer se a seguinte mensagem de erro for retornada: code: 400, The input parameter"AccesskeyId" that is mandatory for processing this request is not supplied?

  • Essa mensagem é retornada porque uma solicitação enviada ao gateway não contém um AccessKey ID.

  • Ao usar o código de exemplo completo baixado do OpenAPI Explorer, verifique se o AccessKey ID está configurado corretamente. Configure seu AccessKey ID e AccessKey secret ao chamar o método principal.

Na aba SDK Sample no OpenAPI Explorer, localize accessKeyId e accessKeySecret no método main e substitua os valores de espaço reservado pelo seu AccessKey.

O que fazer se a seguinte mensagem de erro for retornada: Tea.exceptions.TeaException: Error: SignatureDoesNotMatch.MissingHeader code: 400, The specified signed header "accept;connection;content-type;host;user-agent;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version" is not found?

Essa mensagem é retornada porque o cabeçalho Connection está definido como close para implementar conexões de curta duração ao chamar um serviço no modo autoassinado. Contudo, o método de assinatura V3 é incompatível com essa configuração, causando o erro.

Corrija esse erro usando a seguinte configuração: config.signature_algorithm = 'v2'.

O que fazer se a seguinte mensagem de erro for retornada: Tea.exceptions.TeaException: Connection aborted?

Essa mensagem é retornada porque o intervalo entre solicitações excede o esperado. O servidor mantém uma conexão persistente apenas por 30 segundos, enquanto o cliente tenta mantê-la indefinidamente. Nesse cenário, o servidor fecha a conexão após 30 segundos e, se o cliente iniciar uma solicitação após esse período, a solicitação falhará.

  • Defina o cabeçalho Connection como close para implementar conexões de curta duração.

  • Configure um mecanismo de nova tentativa para garantir que a chamada ocorra dentro de 30 segundos.

Importante

Um mecanismo de nova tentativa pode causar múltiplas operações se uma solicitação for enviada e processada várias vezes. Portanto, recomendamos configurar esse mecanismo apenas para solicitações de consulta, e não para operações de criação, exclusão ou modificação.

O que fazer se uma chamada de API expirar e a mensagem de erro "requests.exceptions.Timeout" ou "requests.exceptions.ConnectionError" for retornada?

Vários fatores podem causar o tempo limite de uma chamada de API. A seção a seguir descreve as causas comuns e as soluções correspondentes.

Problemas de conexão de rede

Causa: A solicitação não chega ao servidor devido a falha na conexão de rede entre cliente e servidor ou instabilidade da rede.

Soluções:

Execute o comando ping ou curl para testar a conectividade entre o host local e o endpoint do serviço de nuvem. Por exemplo, execute ping dysmsapi.aliyuncs.com ou curl -v https://dysmsapi.aliyuncs.com para testar a conectividade entre seu host local e o endpoint da API do Short Message Service (SMS).

  • Se o comando expirar ou não receber resposta, verifique políticas de bloqueio no firewall local ou nos roteadores.

  • Se houver resposta, especifique um tempo limite adequado para evitar falhas causadas por configurações impróprias. Para mais informações, consulte Configurar um período de tempo limite. Código de exemplo:

  • # The timeout period takes effect only for requests that use RuntimeOptions.
    runtimeOptions = RuntimeOptions(
        connect_timeout=5000  # Configure the timeout period for connection requests. Unit: milliseconds.
    )
Causa 2: Período prolongado para processamento da solicitação

Causa: O tempo de processamento da solicitação de API excede o tempo limite de leitura especificado.

Solução: Estenda o tempo limite para a resposta da API. Para mais informações, consulte Configurar um período de tempo limite. Por exemplo, configure o parâmetro de tempo limite de leitura para estender esse período. Código de exemplo:

# The timeout period takes effect only for requests that use RuntimeOptions.
runtimeOptions = RuntimeOptions(
    read_timeout=10000,  # Configure the timeout period for read requests. Unit: milliseconds.
)

O que fazer se a mensagem de erro "-bash: python3: command not found" for retornada no Linux?

Se o Python já estiver instalado, essa mensagem pode indicar configuração incorreta dos links simbólicos.

Nota

Ao acessar um link simbólico, o usuário acessa o arquivo para o qual ele aponta. Por exemplo, ao usar Python 3, você usa efetivamente o interpretador Python 3,12.

  • Execute o comando which python3 pip3 para verificar a existência de links simbólicos no sistema. Se existirem, exclua-os.

rm -rf /usr/bin/python3 /usr/bin/pip3
  • Recrie os links simbólicos. Localize o diretório de instalação do Python, acesse o diretório bin e encontre pip3.12 e python3.12. Execute os seguintes comandos para criar os links simbólicos:

sudo ln -s /usr/local/python3/bin/python3.12 /usr/bin/python3
sudo ln -s /usr/local/python3/bin/pip3.12 /usr/bin/pip3

O que fazer se o erro "Invalid parameters" ou "MissingRequiredParameter" for relatado ao chamar uma operação de API?

Este exemplo utiliza a operação SendSms do Short Message Service (SMS).

  • Acesse a página API Debugging no OpenAPI Explorer e selecione o produto de nuvem e a API.

  • Verifique se todos os parâmetros obrigatórios, como PhoneNumbers e SignName, foram especificados no objeto de solicitação construído. Neste exemplo, usa-se o objeto SendSmsRequest.

  • Confirme se todos os parâmetros obrigatórios estão especificados conforme a referência da API.

  • Certifique-se de que os valores dos parâmetros obrigatórios sejam válidos. Por exemplo, verifique se os números de celular estão em formatos válidos.

  • O SDK verifica automaticamente os parâmetros antes de enviar uma solicitação de API. Se faltar algum parâmetro obrigatório, um erro como MissingRequiredParameter será relatado. Por exemplo, sem o parâmetro PhoneNumbers, o erro "MissingPhoneNumbers: code: 400" será relatado. Nesse caso, especifique o parâmetro conforme a mensagem de erro.

Chamar a API sem o parâmetro de número de telefone retorna o erro MissingPhoneNumbers: code: 400 no console.

send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
            # The mobile numbers to which you want to send a text message.
            phone_numbers='<YOUR_VALUE>',
            # The name of the SMS signature.
            sign_name='<YOUR_VALUE>',
            # The code of the SMS template.
            template_code='<YOUR_VALUE>',
            # The variables of the SMS template. Specify the value in the JSON format. Example: {"code":"1234","name":"1234","time":"1234"}.
            template_param='{"code":"1234","name":"1234","time":"1234"}'
        )

O que fazer se a chamada de uma operação de API falhar e o erro "Tea.exceptions.UnretryableException" for relatado?

Certifique-se de que a região selecionada oferece suporte ao serviço chamado. Usando o SMS como exemplo, encontre os endpoints do serviço na página do produto no OpenAPI Explorer. Use o endpoint correto para sua região.

Clique em na aba Service Area List na página inicial do produto. Use as colunas Region ID e Service Address para encontrar o endpoint correto de cada região. Por exemplo, o endpoint para SMS nas regiões da China continental é dysmsapi.aliyuncs.com.

O que fazer se a seguinte mensagem de erro for retornada: File "/usr/local/python3/lib/python3.6/site-packages/alibabacloud_slb20140515/client.py", line 4, in <module> from Tea.core import TeaCore ModuleNotFoundError: No module named 'Tea'?

Essa mensagem indica que a versão do pip está desatualizada, resultando em dependências incompletas ou excluídas. Atualize o pip e execute o comando pip install <Installation package> para corrigir o erro. Por exemplo, execute pip install alibabacloud-tea para instalar o módulo Tea.

Importante

Quando esse erro ocorre, o sistema pode executar o comando pip install tea e instalar um pacote irrelevante. Verifique a organização ou indivíduo que publica o pacote no repositório Python Package Index (PyPI) e avalie se deve excluí-lo.

Pergunta 13: O que fazer se a seguinte mensagem de erro for retornada: Command "python setup.py egg_info" failed with error code 1 in xxx?

Essa mensagem indica que a versão do Python ou do pip está desatualizada, ou que as bibliotecas ou pacotes necessários não estão instalados, impedindo o funcionamento correto do SDK.

Solução
  1. Verifique a versão atual do Python.

    Execute python -V ou python3 -V para verificar a versão atual do Python. Se for anterior à 3,7, siga as etapas abaixo para atualizá-lo. Acesse o site oficial do Python para obter a URL de download da versão mais recente e as instruções de instalação.

    Atualizar Python

    1. Instale as ferramentas e bibliotecas necessárias para o Python.

      sudo yum groupinstall "Development Tools" -y
      sudo yum install openssl-devel bzip2-devel libffi-devel -y
    2. Baixe a versão necessária do Python no site oficial. Neste exemplo, usa-se o Python 3.7.12.

      sudo curl -O https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz
    3. Descompacte o pacote de instalação.

      sudo tar xzf Python-3.7.12.tgz
    4. Compile e instale o Python.

      cd Python-3.7.12
      sudo ./configure --enable-optimizations
      sudo make altinstall
    5. Verifique a versão do Python.

      python3.7 --version
    6. Execute os seguintes comandos para atualizar o pip para a nova versão do Python:

      python3.7 -m ensurepip
      python3.7 -m pip install --upgrade pip
  2. Se a versão do Python for 3,7 ou posterior, a causa provável é uma versão desatualizada do pip. Execute pip3 install --upgrade pip setuptools para atualizar o pip para a versão mais recente e tente executar o código Python novamente.

  3. Verifique e instale as bibliotecas necessárias.

    Se a versão do Python for 3,7 ou posterior e o problema persistir após a atualização do pip, bibliotecas relacionadas podem estar ausentes. Em alguns casos, a falta de bibliotecas específicas impede a instalação de outras. Por exemplo, para instalar o numpy, instale também bibliotecas matemáticas como blas e lapack. Para instalar o lxml, instale libxml2-dev e libxslt1-dev.

    Execute os seguintes comandos para instalar bibliotecas comuns. Neste exemplo, usam-se lxml e numpy.

    sudo yum install libxml2-dev libxslt1-dev -y 
    sudo yum install blas-devel lapack-devel -y
    Nota

    Pacotes Python são módulos ou bibliotecas que aprimoram e estendem a linguagem, fornecendo ferramentas e métodos adicionais para ajudar desenvolvedores a concluir tarefas específicas de maneira eficiente. Os pacotes necessários dependem dos requisitos do projeto em desenvolvimento.

Pergunta 14: O que fazer se a mensagem de erro "HTTPSConnectionPool(host='ocr-api.cn-hangzhou.aliyuncs.com', port=443): Max retries exceeded with url: /?Country=Vietnam (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:2418)')))" for retornada?

Geralmente, esse erro é causado por falhas no handshake SSL/TLS. Possíveis causas:

  • Incompatibilidade entre as versões SSL/TLS usadas pelo servidor e pelo cliente.

  • Erros no certificado SSL do dispositivo local, como certificado expirado ou cadeia de certificados incompleta.

  • Falhas nos handshakes SSL devido a erros de configuração de rede.

Soluções:
  1. Verifique as versões SSL/TLS: Certifique-se de que o ambiente Python no dispositivo local ofereça suporte à versão SSL/TLS usada pelo servidor para comunicação. Em alguns casos, o servidor aceita apenas TLS 1.2.

    import ssl
    import urllib3
    # Create an SSL context that uses TLS 1.2.
    ssl_context = ssl.create_urllib3_context(ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv3, ssl.OP_NO_TLSv1, ssl.OP_NO_TLSv1_1)
    # Initialize the urllib3 pool manager.
    http = urllib3.PoolManager(context=ssl_context)
    # Send the request.
    response = http.request('GET', 'https://ocr-api.cn-hangzhou.aliyuncs.com/?Country=Vietnam')
              
  2. Verifique problemas no ambiente Python:

    1. Certifique-se de que o módulo ssl e a versão da biblioteca urllib3 sejam compatíveis com a versão do Python.

    2. Use um ambiente virtual para reinstalar o Python e suas dependências.

    python -m venv myenv
    source myenv/bin/activate
    pip install requests urllib3 pyOpenSSL
  3. Verifique erros de configuração de rede.

    1. Certifique-se de que o firewall no dispositivo local permita tráfego na porta HTTPS (porta 443).

    2. Se usar um servidor proxy, garanta que ele esteja configurado corretamente.

    import requests
    # Use a proxy
    proxies = {
        'http': 'http://your-proxy-server:port',
        'https': 'https://your-proxy-server:port'
    }
    response = requests.get(
        'https://ocr-api.cn-hangzhou.aliyuncs.com/?Country=Vietnam',
        proxies=proxies
    )
  4. Atualize as bibliotecas requests e urllib3 para resolver o problema.

    pip install --upgrade requests urllib3
  5. Se o problema persistir após a atualização, a causa pode ser o certificado do ambiente. Configure os seguintes parâmetros para ignorar o certificado e ajustar o tempo limite:

    # Ignore certificate verification.
    runtimeOptions = RuntimeOptions(
     ignore_ssl=True # Ignores SSL certificate verification. Verification is enabled by default.
    )
    # Adjust the timeout.
    runtimeOptions = RuntimeOptions(
        read_timeout=xxx,  # Read timeout in milliseconds (ms)
        connect_timeout=xxx  # Connection timeout in milliseconds (ms)
    )
  6. Se o problema persistir após desativar a verificação de certificado SSL, defina a variável de ambiente PYTHONHTTPSVERIFY como 0 para desabilitar essa verificação.

    export PYTHONHTTPSVERIFY=0  # Disable HTTPS verification.
  7. Verifique o certificado SSL na máquina local: Certifique-se de que o certificado SSL esteja atualizado e completo. Use ferramentas como certbot para atualizar e instalar certificados.

    sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --email yo**@email.com

Erros básicos do Python

Mensagem de erro

Causa

Solução

SyntaxError

O código contém um erro de sintaxe, como ortografia incorreta, dois pontos ausentes ou parênteses desemparelhados.

Verifique o código e valide a sintaxe. Use o recurso de realce de sintaxe de um ambiente de desenvolvimento integrado (IDE) ou editor para identificar erros.

NameError

A variável ou função a ser usada não está definida.

Valide o nome da variável ou função e certifique-se de que tenha sido devidamente definida ou importada no código.

TypeError

A operação ou função é incompatível com o tipo do objeto alvo.

Verifique os tipos de dados no código e confirme se a operação ou função se aplica ao tipo do objeto. Use funções de conversão de tipo para resolver incompatibilidades.

IndexError

O índice especificado não existe na lista, tupla ou string.

Certifique-se de que o índice esteja dentro do intervalo válido do objeto. Use instruções condicionais, tratamento de exceções ou funções internas como len() para validar o índice.

ValueError

Um valor de parâmetro na função é inválido.

Confirme se os valores de parâmetro especificados atendem aos requisitos. Use instruções condicionais ou tratamento de exceções para validar os valores.

FileNotFoundError

O arquivo a ser aberto ou acessado não existe.

Valide o caminho do arquivo e verifique sua existência. Use instruções condicionais ou tratamento de exceções para lidar com arquivos inexistentes.

ZeroDivisionError

O divisor é zero.

Antes de dividir, certifique-se de que o divisor não seja zero. Use instruções condicionais ou tratamento de exceções para validar o valor do divisor.

FloatingPointError

Um cálculo de ponto flutuante resulta em infinito ou NaN (Not a Number).

Certifique-se de que os valores envolvidos no cálculo estejam dentro do intervalo válido. Use funções de verificação para validar os valores e trate exceções adequadamente.

OverflowError

Um cálculo numérico resulta em um valor fora do intervalo suportado pelo tipo de dados atual.

Verifique se o tipo de dados usado suporta o intervalo do resultado. Para grandes valores numéricos, use tipos de dados apropriados ou bibliotecas de terceiros.

BufferError

Os dados a serem lidos ou gravados excedem o tamanho do buffer, o buffer não existe ou a operação causa erro de memória ou limite.

Verifique o tamanho do buffer e garanta que a quantidade de dados não o exceda. Use instruções condicionais ou tratamento de exceções para validar a quantidade de dados.

EOFError

Leitura de arquivo vazio ou fim de arquivo atingido.

Verifique o conteúdo do arquivo e garanta que haja dados legíveis. Se o arquivo estiver vazio ou o fim for atingido, uma exceção EOFError será lançada. Use instruções condicionais ou tratamento de exceções para tratar essa condição.

Erros de SDK do Python

Mensagem de erro

Causa

Solução

aliyunsdkcore.acs_exception.exceptions.ClientException: SDK.InvalidParameter The parameter region_id not match with ^[a-zA-Z0-9_-]+$

Formato inválido do parâmetro region_id na inicialização do cliente.

Insira uma string no formato cn-<Região>.

SDK.InvalidRegionId

O pacote principal de uma versão anterior não identifica o endpoint.

Atualize o pacote aliyun-python-sdk-core para a versão mais recente e especifique um ID de região válido.

SDK.ServerUnreachable

Erro de rede.

Na versão mais recente do SDK, esse erro é substituído por um erro específico, como SDK.HttpError.

Atualize o pacote aliyun-python-sdk-core para a versão mais recente.

SDK.MissingEndpointsFiler

Nenhum filtro de endpoint configurado.

Configure um filtro de endpoint e garanta seu funcionamento correto.

SDK.UnknownServerError

Erro desconhecido no servidor.

Reenvie a solicitação.

SDK.InvalidSessionExpiration

Tempo de expiração da sessão inválido.

Verifique e valide o tempo de expiração da sessão. Se expirada, atualize-a ou obtenha uma nova credencial de sessão.

SDK.NotSupport

Recurso não suportado.

Certifique-se de que a versão do SDK em uso oferece suporte aos recursos necessários.

SDK.EndpointResolvingError

Erro na resolução do endpoint.

Verifique a lógica de resolução e garanta que endpoints válidos sejam resolvidos e obtidos corretamente.

SDK.InvalidServerResponse

Resposta inválida do servidor.

Verifique o conteúdo da resposta e garanta que atenda aos requisitos dos serviços da Alibaba Cloud. Analise o conteúdo para obter mais informações e ajuste-o conforme as necessidades do negócio.

RequiredArgumentException

Falta de parâmetros obrigatórios.

Verifique os parâmetros obrigatórios e valide seus valores.

UnretryableException

Erro de rede.

1. Verifique se o endpoint especificado é válido.

2. Execute ping ou curl para testar a conectividade de rede.

Suporte técnico

As soluções acima ajudam a otimizar o uso dos SDKs da Alibaba Cloud. Se encontrar outros problemas, entre em contato com o suporte técnico da Alibaba Cloud pelo seguinte canal: