我的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。 –