Python 处理来自未预定义异常的第三方库的异常
请求库中有一个json()方法 我想处理他的异常,“如果突然出了问题。”例如,服务器没有用json响应,而是用其他东西响应,嗯,编码方面存在各种各样的问题,等等 我深入到文档中,然后深入到源代码中,并意识到最后,在请求中本身,所有内容都同时绑定到两个库:Python 处理来自未预定义异常的第三方库的异常,python,python-3.x,request,Python,Python 3.x,Request,请求库中有一个json()方法 我想处理他的异常,“如果突然出了问题。”例如,服务器没有用json响应,而是用其他东西响应,嗯,编码方面存在各种各样的问题,等等 我深入到文档中,然后深入到源代码中,并意识到最后,在请求中本身,所有内容都同时绑定到两个库: try: import simplejson as json except ImportError: import json 因此,它们中的每一个都有两种类型的异常 我有一个“联合武器”库,我希望在独立于已安装系统、库等的条件
try:
import simplejson as json
except ImportError:
import json
因此,它们中的每一个都有两种类型的异常
我有一个“联合武器”库,我希望在独立于已安装系统、库等的条件下使用它
在这种情况下如何正确注册
try:
answer = requests.get (url, param, headers) .json ()
except (???, ???, ???):
do_my_function (incorrect_answer)
这样它就不依赖于导入发生的库以及它们的特定异常了?既然您已经进入了源代码,就应该转到最后。而且文档也可以提供帮助 在[documentation][1]on requests json()中,它说: 如果JSON解码失败,
r.JSON()
将引发异常。例如,如果响应获得204(无内容),或者如果响应包含无效的JSON,则尝试r.JSON()
引发ValueError:无法解码任何JSON对象
我们必须捕获ValueError
异常:
try:
answer = requests.get (url, param, headers).json ()
except ValueError:
do_my_function (incorrect_answer)
如果查看json和simplejson源代码,您会发现这两个包都使用了从ValueError
继承的更准确的异常:JSONDecodeError
。因此,您可以这样做:
try:
from simplejson import JSONDecodeError
except ImportError:
from json import JSONDecodeError
try:
answer = requests.get (url, param, headers) .json ()
except JSONDecodeError:
do_my_function (incorrect_answer)
[1]:。如果您询问除了ValueError:
之外的是否在任何情况下都有效,那么:是的,但它也会捕获任何其他ValueError
s(例如,来自请求本身)。@jonrsharpe ok。非常感谢。我试过了。但实际上我想处理的范围不太广…:)毕竟,以同样的方式,写类似“例外”的东西被认为是非常糟糕的形式。