Hi, I am diving ever deeper into Django and I came upon some behavior that frustrated me but perhaps I am just misunderstanding what should happen and why.
In writing unit tests for code, I wanted to write one that traps a json.decoder.JSONDecodeError by passing in some malformed JSON. What appears to happen however, is that Django only reports back the very last exception that was raised. In the case of json.decoder.JSONDecodeError, it's initialization raises a ValueError here is the code of json.decoder.JSONDecodeError (from my python 3.5 install) class JSONDecodeError(ValueError): """Subclass of ValueError with the following additional properties: msg: The unformatted error message doc: The JSON document being parsed pos: The start index of doc where parsing failed lineno: The line corresponding to pos colno: The column corresponding to pos """ # Note that this exception is used from _json def __init__(self, msg, doc, pos): lineno = doc.count('\n', 0, pos) + 1 colno = pos - doc.rfind('\n', 0, pos) errmsg = '%s: line %d column %d (char %d)' % (msg, lineno, colno, pos) ValueError.__init__(self, errmsg) self.msg = msg self.doc = doc self.pos = pos self.lineno = lineno self.colno = colno def __reduce__(self): return self.__class__, (self.msg, self.doc, self.pos) Once my django parsing code (default django rest framework 3.7.7) steps into here, it's own ParseError class sees only the ValueError (which redacts the faulty input JSON). Is this a feature? A bug? Something in between? My desired behavior would be that i could access the JSONDecodeError instances doc property to go back and find out exactly which malformed JSON was ruining my ability to serve a complete request. Is there a way I can get Django to make visible the underlying JSONDecodeError (that drove a Value Error that django rest framework then presents to me wrapped in its ParseError class)? Clearly, I could change the underlying JSON Decoder code to my liking, either by changing it's errmsg or by subclassing (ValueError) it in a way to provide more rich information back upstream? If I run some sample code just in python CLI (less django) I get the whole JSONDecodeError exception as I desire. So I suspect modding the decoder class is not really what I want. But it would be nice if much like a stack trace, I could access ParseError instantianted by ValueError instantiated by JSONDecodeError so that I could access all the properties of the underlying error (JSONDecodeError). Should I make a feature request? Or is there already a toggle I can control somewhere to do this? Thanks, Steve -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/15c7b76c-8dcd-4424-b336-8d0325c3a1e1%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.