当我在Python 3中使用json.loads并捕获任何结果错误时,例如:
try:
data = json.loads(string)
except ValueError as err:
print(err)
我得到一个有用的信息,比如:
Expecting ',' delimiter: line 12 column 12 (char 271)
我希望能够向用户显示这一点,以及导致问题的确切位置(我正在阅读用户编写的JSON)。我怎样才能脱离这个行列?
我可以在err上使用regex,但这感觉不是个好主意,因为我不知道这个消息是否是国际化的,并且可能在不同版本的python中发生变化。有更好的办法吗?
如果json对象很小,请在此处越过json对象 http://jsonlint.com/ 它给出了json中断的位置。
扫描json/decoder.py source code,我们可以看到解码器的错误消息是使用
errmsg
函数构造的:因为这是一个纯python模块,所以很容易用自定义的函数包装这个函数。这个过程称为monkey patching:
显然,这个解决方案并不理想,因为实现可能随时更改,尽管它仍然比依赖消息要好。在修补之前,您应该检查
errmsg
是否存在(并且可能没有其他参数,或者使用varargs)。如果您使用simplejson库,您将获得一个合格的
JSONDecodeError
:希望,这将是merged into stdlib很快。
相关问题 更多 >
编程相关推荐