gpt4 book ai didi

python - 验证值在 Python 枚举值中

转载 作者:行者123 更新时间:2023-11-28 22:13:13 25 4
gpt4 key购买 nike

我继承了看起来像这样的代码。

class Clients(IntEnum):
ALICE = 1
BOB = 2
PETER = 3
CHERYL = 4
LARRY = 5

if client_id == 1:
client_info = find_info(Clients.ALICE.value)
elif client_id == 2:
client_info = find_info(Clients.BOB.value)
elif client_id == 3:
client_info = find_info(Clients.PETER.value)
elif client_id == 4:
client_info = find_info(Clients.CHERYL.value)
elif client_id == 5:
client_info = find_info(Clients.LARRY.value)
else:
raise Exception('Unknown client_id.')

没有太多使用 Python 枚举的经验,我非常希望将其简化为类似这样的东西(伪代码):

if client_id in dict(Clients).keys():
client_info = find_info(client_id)
else:
raise Exception('Unknown client_id.')

我试过 Clients.__members__Clients.__dict__,但它们的行为并不像我预期的那样,返回了一个叫做 mappingproxy 的东西

我可以在 Clients.__members__ 中执行 'ALICE',但是这些值有等效项吗?如果没有,是否有更优雅的方式来编写这段代码?

最佳答案

您可以仅将值存储在普通元组(或列表)中,并利用枚举允许按值访问这一事实:

values = tuple(item.value for item in Clients)

if client_id in values:
# do something with Clients(client_id)
else:
# print message or raise exception

或者您可以使用字典将值映射到枚举成员:

mapping = dict((item.value, item) for item in Clients)

if client_id in mapping:
# do something with mapping[client_id]
else:
# print message or raise exception

关于python - 验证值在 Python 枚举值中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54126570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com