On Mar 3, 2011, at 1:46 AM, darkblue_b wrote:
> 
>>> 
>>> @jonathan: Yes, a more detailed error messages than "no json" would be 
>>> awesome.
>> 
>> generic.json now says:
>> 
>> {{
>> ###
>> # response._vars contains the dictionary returned by the controller action
>> ###
>> try:
>>    from gluon.serializers import json
>>    response.write(json(response._vars),escape=False)
>>    response.headers['Content-Type']='text/json'
>> except:
>>    raise HTTP(405,'no json')
>> 
>> }}
>> 
>> I suggest this instead:
>> 
>> {{
>> ###
>> # response._vars contains the dictionary returned by the controller action
>> ###
>> try:
>>         from gluon.serializers import json
>>         response.write(json(response._vars), escape=False)
>>         response.headers['Content-Type'] = 'application/json'
>> except (TypeError, ValueError):
>>         raise HTTP(405, 'JSON serialization error')
>> except ImportError:
>>         raise HTTP(405, 'JSON not available')
>> except:
>>         raise HTTP(405, 'JSON error')
>> 
>> }}
> 
> I patched that in, and changed the last one to say
> 
> except Exception, E:
>    raise HTTP(405, 'JSON error: ' + str(E))
> 
> and got in my case
>   JSON error: 'id'

Ah. Let's find out a little more. I suggest two experiments.

The easier one: include E.__class__.__name__ in the string, so we can see 
what's being raised.

Then I'd like to see if we can force a ticket. Try changing the last raise to: 
raise SyntaxError, and if you get a stack trace, let's see where the exception 
is coming from.

When I took a look through the code, it looked to me like serialization errors 
were all causing Type or Value exceptions, but I might have missed something.

Reply via email to