如何从 int 创建 Python 枚举的实例。Flag 使用默认成员表示不包含在枚举中的 int 中的 2 的幂?

问题描述 投票:0回答:1

假设我有以下标志枚举:

class MyFlags(Flag):
  FLAG0    = 0x01
  FLAG1    = 0x02
  #INVALID = 0x04
  FLAG3    = 0x08
  #INVALID = 0x10
  #INVALID = 0x20
  #INVALID = 0x40
  INVALID  = 0x80

我想从 int 创建 MyFlags 的实例,这样,如果 int 由 MyFlags 中未定义的 2 的幂组成,则返回 MyFlags.INVALID 。换句话说:

>>> Flags(0x01), Flags(0x03), Flags(0x04), Flags(0x85)
(<MyFlags.FLAG0: 1>, <MyFlags.FLAG0|FLAG1: 3>, <MyFlags.INVALID: 128>,<MyFlags.FLAG0|INVALID>: 129)

因此,如果解码了无效标志,则很容易识别,即:

>>> rx_byte = 0x081
>>> MyFlags.INVALID in MyFlags(rx_byte)
True
python enums
1个回答
0
投票

如果

MyFlags(x)
失败,则会引发
ValueError
;抓住那个。

try:
    x = MyFlags(15)
except ValueError:
    x = ...
© www.soinside.com 2019 - 2024. All rights reserved.