如何构造请求异常处理并检查200个响应?

贝曼
  1. 我应该如何构造代码,以免出现此错误:
    UnboundLocalError: local variable 'r' referenced before assignment

  2. 如果我想确保在返回之前得到200的响应r.json(),则应将此代码放在try块的内部或外部

    if r.status_code == requests.code['ok']
    

我的功能:

def get_req():
    url = 'https://www.example.com/search'
    data = {'p': 'something'}
    try:
        r = requests.get(url, params=data)
        r.raise_for_status()
    except requests.exceptions.HTTPError as err:
        print(err)
    return r.json()
史蒂夫

我看不到任何方式可以得到该错误。我没有看到对r的引用,除非您对request.get()的调用成功并且正确设置了r您确定在显示给我们的代码中看到了这种情况吗?

为什么要检查状态码200?您已经在调用raise_for_status(),基本上可以做到这一点。raise_for_status()检查其他一些表示成功的代码,但出于您的目的,您可能还希望代码将它们视为成功。因此,我认为您无需明确检查200。

因此,当您调用r.json()并返回时,这应该就是您想要做的。

更新:现在您已经删除了sys.exit(),您必须在错误情况下做一些特定的事情。在评论中,我给了您我看到的四种可能性。最简单的方法是,如果请求失败,则将您的方法声明为返回None这会将最少的信息返回给调用者,但是您已经在打印错误,所以可能没问题。对于这种情况,您的代码如下所示:

def get_req():
    url = 'https://www.example.com/search'
    data = {'p': 'something'}
    try:
        r = requests.get(url, params=data)
        r.raise_for_status()
    except requests.exceptions.HTTPError as err:
        print(err)
        return None
    return r.json()

如果您定义在请求失败时返回None,但在某些其他情况下引发异常,则该代码是“正确的” ,这是预期的行为。如果您从不希望此方法引发异常,则可能要捕获Exception或单独捕获Exception我不知道request.get ()是否有可能引发HTTPError以外的其他异常也许不是,在这种情况下,此代码永远不会按原样抛出异常。IMO,最好假设它可以,并明确处理该案件。该代码以这种方式更具可读性,并且不需要将来的读者知道request.get()能够抛出什么异常来了解所有情况下此代码的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章