Python 处理来自未预定义异常的第三方库的异常

Python 处理来自未预定义异常的第三方库的异常,python,python-3.x,request,Python,Python 3.x,Request,请求库中有一个json()方法 我想处理他的异常,“如果突然出了问题。”例如,服务器没有用json响应,而是用其他东西响应,嗯,编码方面存在各种各样的问题,等等 我深入到文档中,然后深入到源代码中,并意识到最后,在请求中本身,所有内容都同时绑定到两个库: try:     import simplejson as json except ImportError:     import json 因此,它们中的每一个都有两种类型的异常 我有一个“联合武器”库,我希望在独立于已安装系统、库等的条件

请求库中有一个json()方法

我想处理他的异常,“如果突然出了问题。”例如,服务器没有用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。非常感谢。我试过了。但实际上我想处理的范围不太广…:)毕竟,以同样的方式,写类似“例外”的东西被认为是非常糟糕的形式。