2016-06-28 5 views
1

Я получаю странное сообщение об ошибке при попытке повернуть объект байтов в строку:TypeError: декодирование ул не поддерживается (Python 3.4)

Traceback (most recent call last): 
    File "/home/Scraper_v1.0.py", line 149, in <module> 
    rawjsonstr = str(rawjsonstr, 'utf-16') 
TypeError: decoding str is not supported 

Мой код выглядит следующим образом:

# preparing string 
      try: 
       rawjsonstr = "".join(rawjson[3]).encode('utf-16') # used to select the correct text/javascript node 
      except IndexError: 
       errorcount += 1 
       with open(filepath, "at") as f: 
        write = csv.writer(f) 
        write.writerow(["Error: no valid JSON found", 
            statenum, 
            statesubnum, 
            suburbnum, 
            listingnum, 
            listingsurlstr]) 
      pass 

      rmvlist = ["var digitalData = ", 
         "var titanEnabled = true;", 
         "titan = titan || {};", 
         "// enable the command queue to allow spa execution in the correct order", 
         "titan.cmd = titan.cmd || [];"] 

      rawjsonstr = str(rawjsonstr, 'utf-16') 

Редактировать

Повторно запускали выше код без кодирования/декодирования. Теперь получите следующую ошибку в том же цикле.

Traceback (most recent call last): 
    File "/home/isaac/PycharmProjects/ResidentialData/AllHomesScraper_v1.0.py", line 162, in <module> 
    jsondata = json.loads(rawjsonstr) 
    File "/usr/lib64/python3.4/json/__init__.py", line 318, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib64/python3.4/json/decoder.py", line 343, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib64/python3.4/json/decoder.py", line 359, in raw_decode 
    obj, end = self.scan_once(s, idx) 
ValueError: Expecting ',' delimiter: line 1 column 1033 (char 1032) 

Я вновь запустить его и захватить строку, которая вызывает эту ошибку (похоже, что это просто неправильно отформатированные данные в формате JSON).

Редактировать: Решение представлено ниже.

+0

Подождите, почему вы кодируете строку, а затем сразу ее декодируете? Кажется, что вы, вероятно, оставили что-то, что делает экземпляр 'rawjsonstr'' str' вместо экземпляра 'bytes', когда выполнение попадает в' str (rawjsonstr, 'utf-16') '. – user2357112

+1

Это не имеет смысла. кодирование и декодирование глупо, но оно должно работать по определению. Если вы кодируете UTF-16, затем декодируете одни и те же данные с помощью UTF-16, то это должно быть без проблем. Если вы можете воспроизвести, заверните 'str (rawjsonstr, 'utf-16')' в 'try/except' и напечатайте' print (type (rawjsonstr), repr (rawjsonstr)) ', чтобы увидеть, что он не работает. Я предполагаю, что вы оставили критический код, но если нет, нам нужно больше информации, чтобы определить проблему. – ShadowRanger

+0

Код был первоначально написан на Python 2.7. Я перешел на 3,4-интерпретатор и столкнулся с несколькими проблемами вокруг изменений формата байтов/строк. Затем я использовал проб и ошибок с различными комбинациями кодирования/декодирования, пока это не сработало, поэтому почему это может показаться странным. Я буду использовать try/except wrapper, чтобы попытаться определить, в чем проблема. – doubleknavery

ответ

1

Ошибка была быть вызвана в результате программы, пытаясь разобрать недопустимое JSON строку: JSON formatter

Решение: Поймать ошибка, и добавить «{» до конца строки, когда это происходит ,

Смежные вопросы