釋放 AI 的強大力量

100 萬免費代幣

88% 價格優惠

立即啟用
本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

常見問題

更新時間:2025-03-24 19:20

本文檔旨在為您提供在Python語言中整合阿里雲SDK時的常見問題集和解決方案。通過本指南,您可以更高效地使用SDK,減少開發過程中的困惑。

環境檢查

  • 確保Python語言環境已經正確安裝,Python環境版本 >= 3.7。

  • 確保您的網路能夠訪問阿里雲的API。

問題列表

常見問題與解決方案

問題1:AttributeError: 'AttributeError' object has no attribute 'message'或”KeyError: 'ALIBABA_CLOUD_ACCESS_KEY_ID “?

可能的原因是您沒有正確地設定阿里雲的憑證(AccessKey)。

  • 錯誤樣本:

 config = open_api_models.Config(
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['LTAI5********'],
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['0wpTx********']
        )
  • 正確樣本:

config = open_api_models.Config(
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
重要

切勿直接在代碼中明文寫入 AccessKey的值。該寫法存在安全隱患。

說明

os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']

和os.environ("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),表示是從環境變數中擷取ALIBABA_CLOUD_ACCESS_KEY_ID及ALIBABA_CLOUD_ACCESS_KEY_SECRET的值。

  • 檢查您的環境變數中是否配置有ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。

  • 在終端(Linux/macOS)或單擊開始(或快速鍵:Win+R)>運行(輸入 cmd)>確定(或按 Enter 鍵),開啟命令提示字元(Windows),執行以下命令。若返回正確的AccessKey,則說明配置成功。如果返回為空白或錯誤,請嘗試重新設定,具體操作請參見設定訪問憑據

Linux/macOS
Windows
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

問題2:SDK安裝失敗?

  • 確保使用了正確的Python版本(如Python 3.x)。

  • 使用pip安裝時加上--upgrade選項,確保安裝最新版本:

pip install --upgrade <SDK_NAME>  
  • 如果在安裝過程中遇到許可權問題(比如在系統層級的Python庫路徑下安裝時),可以使用--user選項,這將SDK安裝到使用者目錄中,而不是系統目錄:

pip install --user <SDK_NAME>  
  • 如果你在同一台機器上安裝了多個版本的Python,確保你在使用的Python版本中安裝了SDK。例如,使用python3而不是python,確保對應的pip也使用了pip3

問題3:匯入模組失敗,ModuleNotFoundError

確保SDK已經正確安裝,可以在Python環境下嘗試匯入:

  • 開啟python解譯器

python
  • 匯入模組

import <SDK_NAME> 

如果沒有任何錯誤,說明SDK已正確安裝。如果出現`ModuleNotFoundError`或`ImportError`,說明SDK未正確安裝。

pip install <SDK_NAME>

問題4:使用Credentials工具時報錯?

  • 使用Credentials工具要求Python版本 >= 3.7。

  • 使用V2.0代系的阿里雲SDK。

pip install alibabacloud_credentials

問題5:code: 400, The input parameter"AccesskeyId" that is mandatory for processing this request is not supplied?

  • 引發該錯誤直接原因是發到網關的請求沒有攜帶AccesskeyId。

  • 您需要檢查在使用openapi門戶下載的完整工程時AccesskeyId是否放到了錯誤的位置。應替換main方法下accessKeyId和accessKeySecret兩個字串。

image

問題6: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?

引發該錯誤直接原因是自簽名調用服務時通過設定header {"Connection":"close"}以實現短串連,但是V3簽名對此不相容,從而導致報錯。

您可以通過設定:config.signature_algorithm = 'v2'來解決。

問題7:Tea.exceptions.TeaException: Connection aborted?

導致該錯誤的直接原因是請求間隔過長。長串連服務端僅保持30秒,而用戶端則持續保持串連,這導致在經歷30秒的間隔後,請求被服務端斷開,進而導致請求失敗。

  • 設定header {"Connection":"close"}以實現短串連。

  • 可以配置重試,維持在30s內有一次調用。

重要

重試機制在處理多次請求時可能會引發多次業務執行的風險。因此,對於查詢操作的請求,建議配置重試機制;而對於增、刪、改操作的請求,則不建議配置重試。

問題8:調用API逾時,提示:”requests.exceptions.Timeout“或”requests.exceptions.ConnectionError“?

逾時的常見原因與解決步驟:

逾時問題可能由多種因素引起,以下是一些常見的原因及相應的解決步驟:

1.網路連接問題

情況描述:用戶端與伺服器之間的網路不通或網路不穩定導致請求無法到達目標伺服器。

解決方案:

  • 使用命令ping [www.example.com/192.168.x.x]curl -Is https://xxx.xxx.xx檢查網路連通性。當遇到網路不通時,應在防火牆或路由器中檢查是否有阻斷策略;對於網路不穩定的情況,建議更換網路環境。

  • 通過配置延長逾時時間, 具體操作請參見逾時機制。例如通過配置連線逾時參數來延長連線逾時時間,範例程式碼如下:

    # 對使用RuntimeOptions的請求生效
    runtimeOptions = RuntimeOptions(
        connect_timeout=5000  # 連線逾時 單位毫秒(ms)
    )
2.API處理時間過長

情況描述:目標API處理請求的時間超過了設定的讀逾時時間。

解決方案:通過配置或增加逾時時間來適應較長的API回應時間, 具體操作請參見逾時機制。例如通過配置運行時參數(RuntimeOptions)來配置當前請求的逾時時間,範例程式碼如下:

# 對使用RuntimeOptions的請求生效
runtimeOptions = RuntimeOptions(
    read_timeout=10000,  # 讀逾時時間 單位毫秒(ms)
)

問題9:Linux系統:-bash: python3: command not found?

如果您已安裝了Python,則可能是軟串連沒有配置正確。

說明

軟串連的作用是當使用者訪問軟串連時,實際上訪問的是軟串連指向的目標檔案。比如使用python3實際上指向的是python3.12解譯器。

  • 執行which python3 pip3尋找當前系統是否存在軟串連,如果存在,需要刪除軟串連。

rm -rf /usr/bin/python3 /usr/bin/pip3
  • 重新建立軟串連。找到Python的安裝目錄,進入bin目錄,找到pip3.12和python3.12。執行下面命令建立新軟串連。

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

問題10:調用API時返回“Invalid parameters”錯誤或”MissingRequiredParameter“類型錯誤?

這裡以調用簡訊服務的傳送簡訊介面為例:

  • 進入OpenAPI門戶的API調試頁面,選擇雲產品和介面。

  • 仔細對比構造的請求對象(如 SendSmsRequest)是否填充了所有必需欄位,例如手機號、簽名等。

  • 參考API文檔確認必填項。確保必填參數值正確。

  • 確保填寫的必填參數值正確無誤,例如手機號格式是否符合要求。

  • 在調用 API 前,SDK 會對參數進行自動校正。如果缺少必要參數,您將收到類似 MissingRequiredParameter 的錯誤提示。例如,如果手機號參數缺失,會報錯 “MissingPhoneNumbers: code: 400”。

image

send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
            # 需要替換成為您接收簡訊的手機號碼
            phone_numbers='<YOUR_VALUE>',
            # 需要替換成為您的簡訊簽名
            sign_name='<YOUR_VALUE>',
            # 需要替換成為您的簡訊模板code
            template_code='<YOUR_VALUE>',
            # 樣本值:{"code":"1234","name":"1234","time":"1234"}為Json格式
            template_param='{"code":"1234","name":"1234","time":"1234"}'
        )

問題11:API 呼叫失敗,提示地區不支援,報錯”Tea.exceptions.UnretryableException“?

確保您所選地區支援您正在調用的服務。這裡以簡訊服務為例,查看產品的Endpoint可以通過OpenAPI 開發人員門戶的產品首頁中進行尋找確認,請確保填寫正確的Endpoint。

image

問題12: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'?

引發該錯誤的原因是由於PIP版本過舊,導致依賴包安裝不完整,或部分依賴包已被刪除。您可以通過升級PIP並再次執行pip install <產品包>來解決此問題,或者安裝缺失的Tea包,使用命令pip install alibabacloud-tea

重要

遇到此類錯誤時,系統可能會執行 pip install tea以安裝一個不相關的包。請您考慮是否需要刪除該包(可通過 PyPI 查看該包的發布組織或個人)。

問題13報錯:Command "python setup.py egg_info" failed with error code 1 in xxx?

引發該錯誤的原因是由於Python版本或pip版本過低或者缺少相應的開發庫(擴充包),導致在安裝SDK後無法正常使用。

解決方式:
  1. 請檢查您使用的Python版本。

    請執行命令python -Vpython3 -V檢查當前Python的版本,若您的Python版本小於3.7,請按照以下步驟升級Python版本。您可以訪問 Python 官網 擷取最新版本的下載連結和安裝說明。

    升級Python版本

    1. 安裝構建Python的工具和庫:

      sudo yum groupinstall "Development Tools" -y
      sudo yum install openssl-devel bzip2-devel libffi-devel -y
    2. 從Python的官方網站下載所需的版本。以Python 3.7.12為例:

      sudo curl -O https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz
    3. 解壓下載的檔案:

      sudo tar xzf Python-3.7.12.tgz
    4. 編譯和安裝:

      cd Python-3.7.12
      sudo ./configure --enable-optimizations
      sudo make altinstall
    5. 驗證Python版本:

      python3.7 --version
    6. 使用以下命令為新安裝的Python版本升級pip

      python3.7 -m ensurepip
      python3.7 -m pip install --upgrade pip
  2. 若Python版本大於或等於3.7,可能是由於pip版本過低所導致。請執行命令pip3 install --upgrade pip setuptools以升級到最新版本。然後,再嘗試運行Python代碼。

  3. 檢查並安裝必要的開發庫。

    如果您的Python版本大於等於3.7,更新pip版本後仍然出現錯誤,問題可能由於缺少某些開發庫引起。在某些情況下,缺少特定的開發庫可能會導致安裝失敗。例如,如果您要安裝numpy,可能需要相關的數學庫如blaslapack。如果要安裝lxml,則需要安裝libxml2-devlibxslt1-dev

    可以使用如下命令安裝常見的開發庫(以lxmlnumpy為例)

    sudo yum install libxml2-dev libxslt1-dev -y 
    sudo yum install blas-devel lapack-devel -y
    說明

    Python的擴充包(開發庫)是為了增強和擴充Python語言功能而設計的模組或庫。它們提供了額外的工具和方法,使開發人員能夠更輕鬆高效地完成特定任務。具體哪些擴充包是“必須”的,完全取決於您正在開發的具體專案需求。

問題14:報錯:'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)')))'?

該錯誤通常與 SSL/TLS 協議握手失敗有關,可能的原因包括:

  • 伺服器和用戶端之間的 SSL/TLS 版本不相容。

  • 本地裝置的 SSL 憑證存在問題(例如,認證到期或憑證鏈結不完整)。

  • 網路設定問題導致 SSL 握手失敗。

解決方案:
  1. 檢查 SSL/TLS 協議版本:確保本地 Python 環境支援與伺服器通訊所需的 SSL/TLS 版本(例如,伺服器可能僅支援 TLS 1.2)。

    import ssl
    import urllib3
    
    # 建立一個 SSL 上下文,使用 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)
    
    # 初始化 urllib3 池管理器
    http = urllib3.PoolManager(context=ssl_context)
    
    # 發送請求
    response = http.request('GET', 'https://ocr-api.cn-hangzhou.aliyuncs.com/?Country=Vietnam')
    
  2. 檢查 Python 環境問題:

    1. 確保 ssl 模組和 urllib3 庫的版本與 Python 版本相容。

    2. 使用虛擬環境重新安裝 Python 和相關依賴:

    python -m venv myenv
    source myenv/bin/activate
    pip install requests urllib3 pyOpenSSL
  3. 檢查網路設定問題,

    1. 確保本地防火牆允許 HTTPS 連接埠(443)的流量。

    2. 如果使用Proxy 伺服器,確保代理配置正確:

    import requests
    
    # 使用代理
    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. 通過升級 requests 和 urllib3 庫來解決問題。

    pip install --upgrade requests urllib3
  5. 如果在升級後仍然出現錯誤,則可能是由於環境認證的問題。請設定以下參數以忽略認證,同時調整逾時時間。

    # 忽略認證驗證
    runtimeOptions = RuntimeOptions(
     ignore_ssl=True # 忽略對 SSL 憑證的驗證,預設驗證
    )
    
    # 調整逾時時間
    runtimeOptions = RuntimeOptions(
        read_timeout=xxx,  # 讀逾時時間 單位毫秒(ms)
        connect_timeout=xxx  # 連線逾時 單位毫秒(ms)
    )
  6. 若在忽略認證後仍然出現錯誤,請將環境變數 PYTHONHTTPSVERIFY 設定為 0,以強制忽略 SSL 驗證。

    export PYTHONHTTPSVERIFY=0  # 忽略 HTTPS 驗證
  7. 檢查本地 SSL 憑證:確保本地裝置上的 SSL 憑證是最新且完整的。可以使用工具(如 certbot)更新認證或安裝缺失的認證。

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

Python基礎錯誤碼自查表

錯誤碼

錯誤原因

解決方案

SyntaxError

代碼中發現了語法錯誤,通常是拼字錯誤、缺少冒號、括弧不匹配等。

檢查代碼,確保文法正確。使用 IDE 或編輯器的文法高亮功能可以協助您找到語法錯誤。

NameError

嘗試使用一個未定義的變數或函數。

確保變數或函數的名稱正確,並且已經在代碼的適當位置定義或匯入。

TypeError

操作或函數應用於不相容的物件類型。

檢查代碼中的資料類型,確保操作或函數適用於所使用的物件類型。可以使用類型轉換函式來解決類型不符的問題。

IndexError

嘗試訪問列表、元組或字串中不存在的索引。

確保索引在對象的有效範圍內。可以使用條件陳述式或異常處理來檢查索引的有效性,或者使用內建的索引檢查函數如 :len()。

ValueError

函數接收到一個無效的參數值。

確保提供給函數的參數值符合預期的要求。可以使用條件陳述式或異常處理來驗證參數值的有效性。

FileNotFoundError

嘗試開啟或訪問不存在的檔案。

確保指定的檔案路徑正確,並檢查檔案是否存在。可以使用條件陳述式或異常處理來處理檔案不存在的情況。

ZeroDivisionError

試圖進行除法運算時,除數為零。

在進行除法運算之前,先確保除數不為零。可以使用條件陳述式或異常處理來檢查除數的值,避免除以零的情況。

FloatingPointError

浮點數計算中出現了無窮大或非數(NaN)的結果。

確保進行浮點數計算時,所涉及的數值在有效範圍內。可以使用數值檢查函數來驗證數值的有效性,並在出現異常情況時採取相應的處理措施。

OverflowError

進行數值計算時,結果超出了當前資料類型所能表示的範圍。

檢查數值計算中所使用的資料類型,確保它能夠表示運算結果的範圍。如果需要處理大數值,可以使用適當的資料類型或第三方庫來處理。

BufferError

嘗試讀取或寫入超過緩衝區大小的資料。 嘗試訪問不存在的緩衝區。 緩衝區操作導致記憶體溢出或越界。

檢查緩衝區大小:確保讀取或寫入的資料量不超過緩衝區的大小。可以使用條件陳述式或異常處理來驗證資料的大小,並在超過緩衝區大小時採取適當的處理措施。

EOFError

嘗試從一個空檔案或檔案末尾讀取資料。

檢查檔案內容,確保檔案中有資料可供讀取。如果檔案是空的或已到達檔案末尾,嘗試讀取將引發 EOFError 異常。可以使用條件陳述式或異常處理來檢查檔案內容,並在檔案為空白或到達檔案末尾時採取適當的處理措施。

Python SDK異常自查表

錯誤碼

錯誤原因

解決方案

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

填入client初始化的region_id格式錯誤。

填入格式cn-<reigon>字串。

SDK.InvalidRegionId

老版本core包遇到無法定址的網域名稱則會報此錯誤。

升級aliyun-python-sdk-core包到最新版本,並填入正確regionId。

SDK.ServerUnreachable

網路異常。

這個異常在最新版SDK中往往被具體異常取代,例如SDK.HttpError。

請升級aliyun-python-sdk-core到最新版。

SDK.MissingEndpointsFiler

缺少終端點過濾器。

配置正確的終端點過濾器,確保其包含正確的設定。

SDK.UnknownServerError

未知的伺服器錯誤。

嘗試重新發送請求。

SDK.InvalidSessionExpiration

會話到期時間無效。

檢查會話到期時間設定,確保其是有效。如果到期時間已過,需要更新會話或重新擷取會話憑證。

SDK.NotSupport

不支援的功能。

確保所使用的 SDK 版本支援所需的功能。

SDK.EndpointResolvingError

服務網域名稱解析錯誤。

檢查服務網域名稱解析邏輯,確保能夠正確解析和擷取有效服務網域名稱。

SDK.InvalidServerResponse

伺服器返回的響應無效。

檢查伺服器返回的響應內容,確保其符合阿里雲服務的要求。您可以查看響應內容以擷取更多資訊,並根據需要進行調整。

RequiredArgumentException

必填參數缺失。

確保填寫必填參數正確值即可。

UnretryableException

網路異常。

1. 檢查網域名稱 endpoint是否正確。

2. ping curl 網域名稱,檢查網路是否通暢。

支援人員

以上問題的解決方案旨在協助您更友好地使用阿里雲SDK。如果您在使用過程中遇到其他問題,請通過以下方式與我們聯絡:

  • 本頁導讀 (1, M)
  • 環境檢查
  • 問題列表
  • 常見問題與解決方案
  • 問題1:AttributeError: 'AttributeError' object has no attribute 'message'或”KeyError: 'ALIBABA_CLOUD_ACCESS_KEY_ID “?
  • 問題2:SDK安裝失敗?
  • 問題3:匯入模組失敗,ModuleNotFoundError?
  • 問題4:使用Credentials工具時報錯?
  • 問題5:code: 400, The input parameter"AccesskeyId" that is mandatory for processing this request is not supplied?
  • 問題6: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?
  • 問題7:Tea.exceptions.TeaException: Connection aborted?
  • 問題8:調用API逾時,提示:”requests.exceptions.Timeout“或”requests.exceptions.ConnectionError“?
  • 問題9:Linux系統:-bash: python3: command not found?
  • 問題10:調用API時返回“Invalid parameters”錯誤或”MissingRequiredParameter“類型錯誤?
  • 問題11:API 呼叫失敗,提示地區不支援,報錯”Tea.exceptions.UnretryableException“?
  • 問題12: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'?
  • 問題13:報錯:Command "python setup.py egg_info" failed with error code 1 in xxx?
  • 問題14:報錯:'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)')))'?
  • Python基礎錯誤碼自查表
  • Python SDK異常自查表
  • 支援人員
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare