Почему этот код python дает "TypeError: объект JSON должен быть str, а не 'bytes'" на одном компьютере, но не на другом - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть маленькая публикация c репо со следующим python кодом:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib.request, urllib.parse, urllib.error
import json
from urllib.request import urlopen, Request
import os

def get_json_from_url(url):
    config = json.loads(open(os.path.dirname(os.path.abspath(__file__))+'/config.json').read())
    token = config['token']
    request = Request(url)
    request.add_header('Authorization', 'token %s' % token)
    request.add_header('Accept', "application/vnd.github.inertia-preview+json" )
    response = urlopen(request)
    return json.loads(response.read())

def process_cards(pri,url, tag=""):
   cards= get_json_from_url(url)
   for card in cards: 
       payload=""
       if card['note']:
            payload="map project:"+ card['note']
       else:
            payload="Work on: "+ card['content_url']
       print("({}) {} {}".format(pri,payload,tag))


def process_project_board(url,tag=""):
   board= get_json_from_url(url)
   columns_url= board["columns_url"]
   columns= get_json_from_url(columns_url)
   priorities=['*', 'A', 'B', 'C', 'D','E']
   for x in columns:
      process_cards(priorities.pop(0),x['cards_url'],tag)

if __name__ == "__main__":
   process_project_board("https://api.github.com/projects/1613733","+EQT")
   process_project_board("https://api.github.com/projects/1659667","+PersonalProjects")

Он отлично работает с моего рабочего стола, когда я запускаю его с

python3 vision.py

но когда я клонирую его на сервере, я получаю следующую ошибку:

Traceback (most recent call last):
  File "vision.py", line 37, in <module>
    process_project_board("https://api.github.com/projects/1613733","+EQT")
  File "vision.py", line 29, in process_project_board
    board= get_json_from_url(url)
  File "vision.py", line 15, in get_json_from_url
    return json.loads(response.read())
  File "/usr/lib/python3.4/json/__init__.py", line 312, in loads
    s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'

В чем причина различий в поведении? Отсутствуют пропущенные библиотечные ошибки - файл config. json (где находится мой токен Github) идентичен, и у меня никогда не было подобных проблем при переносе файлов на сервер ...

1 Ответ

0 голосов
/ 23 февраля 2020

Вы должны использовать версию Python ниже 3,6 на вашем сервере, а JSON не будет работать так, как ожидалось. Обновите вашу Python версию или используйте virualenv, чтобы вы могли использовать один и тот же код на рабочем столе и на сервере

...