Windows系统googletrans模块报'NoneType'无group属性问题求助
Windows下googletrans触发AttributeError: 'NoneType' object has no attribute 'group'
我编写了一款支持文本、图片、音频三种输入类型的Python翻译程序,使用googletrans API实现翻译功能。该程序在Linux系统中运行正常,但在Windows系统运行时触发'NoneType' object has no attribute 'group'错误,两台系统均通过pip包管理器安装了googletrans模块。
程序代码
import googletrans import pytesseract import speech_recognition as sr import cv2 # OpenCV for camera access def extract_text_from_image(image): text = pytesseract.image_to_string(image) return text def translate_text(text, target_language): translator = googletrans.Translator() translation = translator.translate(text, dest=target_language) return translation.text def translate_speech(target_language): recognizer = sr.Recognizer() with sr.Microphone() as source: print("Listening...") audio = recognizer.listen(source, timeout=5) try: recognized_speech = recognizer.recognize_google(audio) translation = translate_text(recognized_speech, target_language) return recognized_speech, translation except sr.UnknownValueError: return None, None def main(): input_type = input("Enter 'text', 'image', or 'audio' for input: ").lower() target_language = input("Enter the target language (e.g., 'fr' for French): ").lower() if input_type == "text": text = input("Enter the text to translate: ") elif input_type == "image": image_path = input("Enter the path to the image: ") frame = cv2.imread(image_path) if frame is not None: # Extract text from the image image_text = extract_text_from_image(frame) if image_text: print("Text extracted from the image:", image_text) text = image_text else: print("No text found in the image.") return else: print("Image not found or invalid path.") return elif input_type == "audio": recognized_speech, translation = translate_speech(target_language) if recognized_speech is not None: print("Recognized speech:", recognized_speech) print("Translated speech:", translation) else: print("Could not recognize speech.") return else: print("Invalid input type.") return translated_text = translate_text(text, target_language) print("Translated text:") print(translated_text) if __name__ == "__main__": main()
报错信息
PS C:\Users\Deepak> python -u "c:\Users\Deepak\OneDrive\Translator\new.py" Enter 'text', 'image', or 'audio' for input: text Enter the target language (e.g., 'fr' for French): fr Enter the text to translate: hello! how are you? Traceback (most recent call last): File "c:\Users\Deepak\OneDrive\Translator\new.py", line 67, in <module> main() File "c:\Users\Deepak\OneDrive\Translator\new.py", line 62, in main translated_text = translate_text(text, target_language) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "c:\Users\Deepak\OneDrive\Translator\new.py", line 12, in translate_text translation = translator.translate(text, dest=target_language) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Deepak\AppData\Local\Programs\Python\Python312\Lib\site-packages\googletrans\client.py", line 182, in translate data = self._translate(text, dest, src, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Deepak\AppData\Local\Programs\Python\Python312\Lib\site-packages\googletrans\client.py", line 78, in _translate token = self.token_acquirer.do(text) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Deepak\AppData\Local\Programs\Python\Python312\Lib\site-packages\googletrans\gtoken.py", line 194, in do self._update() File "C:\Users\Deepak\AppData\Local\Programs\Python\Python312\Lib\site-packages\googletrans\gtoken.py", line 62, in _update code = self.RE_TKK.search(r.text).group(1).replace('var ', '') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'group' PS C:\Users\Deepak>
问题原因
这个错误源于googletrans官方版本的token获取逻辑与Google翻译网页的最新结构不兼容,导致无法解析出TKK参数。Windows系统的网络环境或请求头差异会放大这个问题,而Linux环境可能因网络配置或缓存情况暂时规避了该问题。
解决办法
方案1:安装修复版googletrans
卸载官方版本,改用经过社区修复的预发布版本:
pip uninstall googletrans -y pip install googletrans==4.0.0-rc1
替换后无需修改原有代码,直接运行即可。
方案2:更换更稳定的翻译库
推荐使用维护更活跃的deep-translator库,避免token解析问题:
- 安装库:
pip install deep-translator
- 修改
translate_text函数:
from deep_translator import GoogleTranslator def translate_text(text, target_language): return GoogleTranslator(target=target_language).translate(text)
方案3:临时指定服务URL(不稳定)
在初始化Translator时手动指定Google翻译服务地址,仅作为临时 workaround:
def translate_text(text, target_language): translator = googletrans.Translator(service_urls=['translate.google.com']) translation = translator.translate(text, dest=target_language) return translation.text
注意:该方法可能随时失效,因为Google会调整服务接口。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

