我的HTTP客户端使用Python 请求库来访问由CloudFlare代理的API。客户端将数字响应状态代码转换为枚举实例HTTPStatus
。简化...如何在Python 3.5中将自定义代码添加到HTTPStatus?
import requests
from http import HTTPStatus
url = ...
response = requests.get(url)
status = HTTPStatus(response.status_code)
的CloudFlare的代理服务可以返回一些非官方的5xx HTTP状态代码:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#CloudFlare。这些因素导致HTTPStatus
增加ValueError
,因为诸如522(连接超时)之类的代码不是Python lib/http/__init__.py
中定义的HTTPStatus
枚举的成员。
如何将非官方CloudFlare状态码添加到HTTPStatus
枚举中?或者,如何将HTTPStatus
enum成员加载到其他枚举以及非官方CloudFlare状态代码中?
Python 3.5 Enum
文档https://docs.python.org/3/library/enum.html描述了迄今为止阻碍了我的限制。
第8.13.9节:只有在 枚举未定义任何成员时才允许子类化枚举。
第8.13.14.2节:关于
Enum
成员最有趣的事情是 他们是单身人士。EnumMeta
创建它们全部,而它是 创建Enum
类本身,然后将自定义__new__()
适当的位置以确保没有新的实例通过返回 只有现有的成员实例。
你绝对需要使用HTTPStatus吗?它不可变的事实使得几乎不可能改变。您可以创建一个字典映射状态代码到statii。 –