首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理不同版本python的不同错误

处理不同版本python的不同错误
EN

Stack Overflow用户
提问于 2017-07-08 18:40:04
回答 2查看 57关注 0票数 3

在捕获不同版本的json模块的错误时,我遇到了问题。json模块为Python 3.5.2抛出一个JSONDecodeError,为Python 2.7.12抛出一个ValueError。这样做的最佳做法是什么?

例如,这适用于Python 2.7.12

代码语言:javascript
复制
a = '{"a": [5 8]}'
try:
    d = json.loads(a)
except ValueError:
    # do something

这适用于Python 3.5.2

代码语言:javascript
复制
a = '{"a": [5 8]}'
try:
    d = json.loads(a)
except json.JSONDecodeError:
    # do something

我已经看到了答案here,但我想找到一个更优雅的方式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-08 18:42:48

JSONDecodeErrorValueError的子类

代码语言:javascript
复制
>>> from json import JSONDecodeError
>>> issubclass(JSONDecodeError, ValueError)
True

只需坚持捕获ValueError即可;如果您需要同时支持这两个版本的话,就足够了。所有JSONDecodeError添加的都是一些额外的字段,使您可以轻松地访问已解析的文档,以及错误的确切位置。

如果您需要访问这些属性(只要它们是存在的),只需使用hasattr()先进行测试:

代码语言:javascript
复制
try:
    d = json.loads(a)
except ValueError as err:
    pos = (None, None)
    if hasattr(err, lineno):
        # JSONDecodeError subclass
        pos = err.lineno, err.colno
票数 2
EN

Stack Overflow用户

发布于 2017-07-08 18:46:54

特别是json模块,它基本上是simplejson打包成json模块并与json一起分发的,您可以使用最新的(或至少相同的)版本的simplejson

这样,所有版本的Python中的异常都将是相同的:JSONDecodeError

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44989586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档