Comment faire pour obtenir l'emplacement des erreurs de json.charges en Python
Lorsque j'utilise json.charges en Python 3 et détecter toutes les erreurs qui en résulte, comme:
try:
data = json.loads(string)
except ValueError as err:
print(err)
Je reçois un message utile comme:
Expecting ',' delimiter: line 12 column 12 (char 271)
Je voudrais être en mesure d'afficher à l'utilisateur, avec exactement à l'emplacement qui est à l'origine du problème (je suis de la lecture dans écrites par l'utilisateur JSON). Comment puis-je sortir de la ligne et de la colonne?
Je pourrais utiliser un regex sur l'erreur, mais qui se sent comme une mauvaise idée, car je ne sais pas si ce message est internationalisé, et pourrait changer dans les différentes versions de python. Est-il un meilleur moyen?
OriginalL'auteur Chris Jefferson | 2013-10-22
Vous devez vous connecter pour publier un commentaire.
De la numérisation de la json/decoder.py le code source, nous pouvons voir que le décodeur de messages d'erreur sont construits à l'aide de la
errmsg
fonction:Puisque c'est un module en pur python, il est facile à envelopper cette fonction avec un programme personnalisé. Ce processus est connu comme monkey patching:
Évidemment, cette solution n'est pas idéale, depuis la mise en œuvre peut changer à tout moment, même si c'est toujours mieux que de s'appuyer sur le message. Vous devriez vérifier si
errmsg
existe avant l'application de correctifs (et éventuellement si il n'y a pas d'autres arguments, ou de l'utilisation varargs).Je pense qu'il serait plus agréable si le parser json retourné une plus qualifié Exception qui contient ces domaines. J'ai ouvert un question pour elle.
OriginalL'auteur goncalopp
Si vous utilisez simplejson bibliothèque, vous obtenez un bien qualifié
JSONDecodeError
:J'espère que ce sera fusionné dans stdlib bientôt.
OriginalL'auteur musically_ut
si l'objet json est petit, au-delà de votre objet Json ici
http://jsonlint.com/
il donne où json pauses.
OriginalL'auteur MONTYHS