首页 > 解决方案 > 比较时,为什么在 try/except 块中引发的异常不等于方法中的 HTTPError?

问题描述

当我遇到或引发HTTPError异常并将异常作为e方法传递时,传递给方法的参数不等于HTTPError. (我理解它不是最佳实践,import *但出于测试目的,它可以简化事情。)

当我调试它并检查整个程序中异常的类型和相等性时,我得到以下信息:

e == HTTPError
False

error == HTTPError
False

type(error)
<class 'requests.exceptions.HTTPError'>

type(HTTPError)
<class 'type'>

代码:


from requests import *


def returnError(error : exceptions) -> dict:
    """ Returns an updated dictionary with corresponding message matching the error """
    if error == HTTPError:
            result = {}
    return result

try:
    raise HTTPError
except (HTTPError) as e:
    returnError(e)

标签: pythonerror-handlingpython-requestshttp-errortry-except

解决方案


这是因为HTTPError它是一个类定义,但e实际上是该类的一个实例。

类似的例子 -

class Dog:
     def __init__(self):
         pass
type(Dog())
>> <class '__main__.Dog'>
type(Dog)
>> <class 'type'>

推荐阅读