Python google-trans-new translate raises error: JSONDecodeError: Extra data:
Asked Answered
A

1

12

While working on Google translate API, I found out some times google can't translate anything, while it keeps raising the same exception: Extra data.

I have searched on the internet, I found a theory saying I have been blocked by Google translate somehow, or can be blocked because translation data exceeds the 5k character limit. here is a solution but I don't think it is the proper way to solve it.

My code is not new, it has been around 1 month working properly, but a few days ago, it started raising the error, I that time I don't know how to solve it so I leave it overnight to solve it later, but when I woke up, it is working again, I thought it was an error caused by google or something so I just forget it, but at the same day, around 10 pm, It stops working. I want to say is it's very inconsistent, sometimes it works some times doesn't.

How to reproduce: run the example code from google_trans_new package website with specified python version.

here is my code:

from google_trans_new import google_translator

translator = google_translator()  
translate_text = translator.translate('สวัสดีจีน',lang_tgt='en') 
print(translate_text)

output:

Traceback (most recent call last):
  File "c:/Users/my_name/MyApp.py", line 105, in <module>
    translate_text = translator.translate('สวัสดีจีน',lang_tgt='en')
  File "C:\Users\my_name\AppData\Local\Programs\Python\Python37\lib\site-packages\google_trans_new\google_trans_new.py", line 188, in translate
    raise e
  File "C:\Users\my_name\AppData\Local\Programs\Python\Python37\lib\site-packages\google_trans_new\google_trans_new.py", line 152, in translate
    response = json.loads(response)
  File "C:\Users\my_name\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "C:\Users\my_name\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 341, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 371 (char 370)

I have tested on my computer, my Heroku web app(for discord bot and line bot), and my friend's laptop. They all raising the same error.

my environments:

Python version: 3.7.0 (google-trans-new specified >= 3.6)
Heroku Python version: 3.8.10
Ariel answered 1/7, 2021 at 17:31 Comment(0)
H
21

There is already an open git issue for this. The workaround for it is:

Change line 151 in google_trans_new/google_trans_new.py which is: response = (decoded_line + ']') to response = decoded_line

You just need to clone the google_trans_new repository and edit line 151 on google_trans_new.py as mentioned above.

Test done using the edited code and your input (สวัสดีจีน): enter image description here

Hemichordate answered 1/7, 2021 at 17:31 Comment(4)
OK, thanks for the workaround here. That git issue was only 3 days old though, and I can't perform the workaround for my Heroku app, just because I can't edit the source code.Ariel
@Ariel I see. There is already a pending commit and hope that the owner accepts it!Hemichordate
This only partially works around the issue. If you need to use the "detect" method, you need to apply this fix again around line 236 (I changed the code a bit so exact line number may be in a small offset)Hexahedron
If it doesn't work, maybe you should to uninstall google_trans_new after you had installed it. pip uninstall google_trans_new Then, if it doesn't work because of an access to the module, move it at the root directory if it doesn't work use import google_trans_new as gtn and translator = gtn.google_translator() instead of google_translator()Timothee

© 2022 - 2024 — McMap. All rights reserved.