You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IBM Language Translator时遇ssl模块无TLSVersion属性错误求助

解决IBM Watson Language Translator V3 API调用中的AttributeError问题

问题场景

调用IBM Watson Language Translator V3 API实现英法互译时,运行包含IAM认证逻辑的Python代码触发AttributeError: module 'ssl' has no attribute 'TLSVersion',无法正常完成翻译功能。

原代码

import json
from ibm_watson import LanguageTranslatorV3
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

apikey="tDc3PeMIIGCoTfNU7emYTw8cBLO4rZdVPiBiuvO2LBu6"
url="https://api.au-syd.language-translator.watson.cloud.ibm.com/instances/ad9dda42-945e-471e-b6a7-6fd0edadeeec"

authenticator = IAMAuthenticator(apikey)
language_translator = LanguageTranslatorV3(version='2018-05-01',authenticator=authenticator)
language_translator.set_service_url(url)

translation = language_translator.translate(text='Hello, how are you today?',model_id='en-fr').get_result()

print(json.dumps(translation, indent=2, ensure_ascii=False))

def englishToFrench(englishText):
    frenchText = language_translator.translate(
    text=englishText,
    model_id='en-fr').get_result()
    print(json.dumps(frenchText, indent=2, ensure_ascii=False))
    return frenchText

def frenchToEnglish(frenchText):
    englishText = language_translator.translate(
    text=frenchText,
    model_id='en-fr').get_result()
    print(json.dumps(englishText, indent=2, ensure_ascii=False))
    return englishText 

报错信息

Traceback (most recent call last):
  File "translator.py", line 9, in <module>
    language_translator = LanguageTranslatorV3(version='2018-05-01',authenticator=authenticator)
  File "/home/theia/.local/lib/python3.6/site-packages/ibm_watson/language_translator_v3.py", line 76, in __init__
    authenticator=authenticator)
  File "/home/theia/.local/lib/python3.6/site-packages/ibm_cloud_sdk_core/base_service.py", line 97, in __init__
    self.http_adapter = SSLHTTPAdapter()
  File "/home/theia/.local/lib/python3.6/site-packages/ibm_cloud_sdk_core/utils.py", line 35, in __init__
    super().__init__(*args, **kwargs)
  File "/home/theia/.local/lib/python3.6/site-packages/requests/adapters.py", line 130, in __init__
    self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block)
  File "/home/theia/.local/lib/python3.6/site-packages/ibm_cloud_sdk_core/utils.py", line 42, in init_poolmanager
    ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2
AttributeError: module 'ssl' has no attribute 'TLSVersion'

报错原因

ssl.TLSVersion是Python 3.7及以上版本才新增的属性,而当前使用的Python版本是3.6,不支持该属性。IBM Cloud SDK的核心库在初始化HTTP适配器时会尝试设置这个属性,导致报错。

另外原代码中frenchToEnglish函数的model_id错误,应该使用fr-en而非en-fr,否则会把法语重复翻译成法语,无法得到正确的英文结果。

解决方案

方案1:升级Python版本

将Python版本升级到3.7或更高版本,这样ssl模块会自带TLSVersion属性,直接解决该报错。

方案2:降级IBM Cloud SDK版本

安装兼容Python 3.6的IBM Cloud SDK核心库版本,比如指定版本2.13.0:

pip install ibm-cloud-sdk-core==2.13.0

该版本不会使用ssl.TLSVersion来设置TLS版本,适配Python 3.6环境。

方案3:手动修改SDK代码(应急方案,不推荐)

找到ibm_cloud_sdk_core/utils.py文件,将其中的:

ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2

替换为Python 3.6兼容的写法:

ssl_context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1

这种方法需要修改第三方库文件,后续更新SDK会覆盖修改,仅作为临时应急使用。

修正后的代码

import json
from ibm_watson import LanguageTranslatorV3
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

apikey="tDc3PeMIIGCoTfNU7emYTw8cBLO4rZdVPiBiuvO2LBu6"
url="https://api.au-syd.language-translator.watson.cloud.ibm.com/instances/ad9dda42-945e-471e-b6a7-6fd0edadeeec"

authenticator = IAMAuthenticator(apikey)
language_translator = LanguageTranslatorV3(version='2018-05-01',authenticator=authenticator)
language_translator.set_service_url(url)

translation = language_translator.translate(text='Hello, how are you today?',model_id='en-fr').get_result()

print(json.dumps(translation, indent=2, ensure_ascii=False))

def englishToFrench(englishText):
    frenchText = language_translator.translate(
    text=englishText,
    model_id='en-fr').get_result()
    print(json.dumps(frenchText, indent=2, ensure_ascii=False))
    return frenchText

def frenchToEnglish(frenchText):
    # 修正model_id为fr-en
    englishText = language_translator.translate(
    text=frenchText,
    model_id='fr-en').get_result()
    print(json.dumps(englishText, indent=2, ensure_ascii=False))
    return englishText 

内容的提问来源于stack exchange,提问作者Atharva Dhorje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:30:50