2013-09-14 1 views
1

Мой код работает нормально локально, но я получаю ошибку 500 с помощью веб-хостинга, который я использую. Проблема, похоже, исходит от строкиpython: 500 error using json.load() in cherrypy

js = json.load(data) 

в поисковом методе. Есть ли что-то в вишневом конфиге, которое мне не хватает? Есть предположения?

#!/usr/local/bin/python3.2 
import cherrypy 
import json 
import numpy as np 
from urllib.request import urlopen 

class Root(object): 
    @cherrypy.expose 
    def index(self): 

      a_query = Query() 
      text = a_query.search() 

      return '''<html> 
      Welcome to Spoti.py! %s 
      </html>''' %text 

class Query(): 

    def __init__(self): 
     self.qstring = '''if i can't''' 

    def space_to_plus(self): 
     self.qstring = self.qstring.replace(' ', '+')  

    def search(self): 
     self.space_to_plus() 
     url = 'http://ws.spotify.com/search/1/track.json?q=' + self.qstring 
     data = urlopen(url) 
     js = json.load(data) 
     return self.qstring 


cherrypy.config.update({ 
    'environment': 'production', 
    'log.screen': False, 
    'server.socket_host': '127.0.0.1', 
    'server.socket_port': 15083, 
}) 

cherrypy.config.update({'tools.sessions.on': True}) 

cherrypy.quickstart(Root()) 
+0

Вы пытались просто открыть ссылку в браузере? Ошибка сервера 500 - внутренняя ошибка сервера - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_Error, похоже, что это не имеет ничего общего с json или cherrypy –

ответ

2

Кажется, json.loads() ожидает объект unicode, когда указаны байты. Попробуйте следующее:

data = urlopen(url).read() 
js = json.loads(data.decode('utf-8')) 
+0

нет, все еще не работает :( –

+0

С этими изменениями он работает для меня. Возможно, вы захотите удалить конфигурационную запись ''environment': 'production'' и отправить трассировку стека. –

+1

Спасибо, действительно, действительно помог мне разобраться с проблемой! В конце мне нужно было использовать: data = urllib.request.urlopen (url) raw_data = data.read() info_dict = json.loads (raw_data.decode ('utf-8')) –