python - 比较时,为什么在 try/except 块中引发的异常不等于方法中的 HTTPError?
问题描述
- 目标:将 try except 块中的异常传递给方法,以根据错误类型向用户定义自定义输出,而不使用 requests.status_code 指定每个错误代码。
- 我所期望的:
error == HTTPError
将等于True
而不是False
. - 我尝试过的:从只是
HTTPError
到requests.exceptions.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)
解决方案
这是因为HTTPError
它是一个类定义,但e
实际上是该类的一个实例。
类似的例子 -
class Dog:
def __init__(self):
pass
type(Dog())
>> <class '__main__.Dog'>
type(Dog)
>> <class 'type'>
推荐阅读
- gradle - CompileJava 找不到元模型,失败
- php - Get files of a directory in root directory
- google-apps-script - 通过电子邮件发送 Google 表格
- django - 有没有办法将 Django 应用程序与预先存在的 Squarespace 站点集成?
- python - 如何根据一个公共键加入两个字典?
- javascript - 使用 lodash 的深度对象扩展行为
- wordpress - WooCommerce - How to Reprocess a Placed Order for Development Testing
- unix - How to search a string containing with $ and ; in linux
- sql - Query to get record id if exists in any table
- javascript - Redux Saga 还没开始?