#2021/01/12 追記しました
#はじめに
pythonでgoogletransライブラリを使って翻訳していると、ある日
AttributeError: 'NoneType' object has no attribute 'group
というエラーが出てきて、それ以降これが原因で処理を失敗してしまうことが多くなりました。
しかも全く同じコードにもかかわらず、エラーが出る時と出ない時があるのです。厄介。
py-googletransのissue を見ると、Google側のせいでエラーが起きてしまうということだったので、今のところ根治はできないみたいです。
しかし一時的な対策はできるので、issueのコメントよりそれを抜粋して紹介します。
#対策
エラーが出る時と出ない時があるので、成功するまで何回もやっちゃおう!!!という方法です。ゴリ押しです。
from googletrans import Translator
src = "翻訳したいテキスト"
tr = Translator()
while True:
try:
text = tr.translate(src, dest="en").text
break
except Exception as e:
tr = Translator()
簡単に説明すると、前述の通りでwhileとtry-exceptを使ってエラーが出たらインスタンスを作り直ししてから再度実行します。
そしてちゃんと実行が成功したらbreakでwhileを抜けて無事終了です。
お疲れ様でした。
#2020/12/02追記
12月に入って突然上記の方法でも何故か上手くいかなくなり、無限にエラーを繰り返すようになってしまいました。
Githubを見ると、人によって(国によって)は有効な解決策があるみたいだったので試してみたところ、なんかよく分かりませんが通りました。
今回はその解決策を紹介します。
※pipでインストールしたものは中身を確認していないので安全とは言い切れません。自己責任でお願いします。
pip uninstall googletrans
pip install git+https://github.com/alainrouillon/py-googletrans@feature/enhance-use-of-direct-api
従来のgoogletransライブラリをアンインストールして、githubに上がっている改善されたライブラリをインストールします。
from googletrans import Translator
src = "翻訳したいテキスト"
#tr = Translator()
tr = Translator(service_urls=['translate.googleapis.com'])
while True:
try:
text = tr.translate(src, dest="en").text
break
except Exception as e:
#tr = Translator()
tr = Translator(service_urls=['translate.googleapis.com'])
以前紹介したコードを2行変えるだけで大丈夫です。
googletransのTranslatorはサービスURLをカスタマイズ(google翻訳ドメインを変更)することができ、ここではサービスURLを「translate.googleapis.com」に変更しています。
(詳しいことはよく分かりませんが。。。)
これで終わりです!
僕はこれ上手くいきましたが、人によっては効果がないこともあるみたいです。
ご参考までにどうぞ。
お疲れ様でした。
#2021/01/12追記
コメント欄にて最新バージョンのgoogletransが安定しているとのコメントを頂きましたのでそのまま掲載させていただきます。
12/27 時点での解決策です
4.0.0 のアルファバージョンは正常に動いてるようです
https://github.com/ssut/py-googletrans/issues/234#issuecomment-741800500
pip uninstall googletrans
pip install googletrans==4.0.0-rc1
>```python
>>> from googletrans import Translator
>>> tr = Translator()
>>> tr.translate(text="hello", src="en", dest="ja").text
'こんにちは'