首页 > 解决方案 > 在连接命令中使用枚举 - python

问题描述

蟒蛇3.8.2:

我试图获取一个使用joinfrom创建的字符串enum

import enum

# import aenum
# https://pypi.org/project/aenum/


class ELEMENTS(enum.Enum):
    L = ("L", "light", "licht")
    P = ("P", "power connectors", "stopcontacten")
    vM = ("vM", "ventilation motor", "ventilatie motor")
    cvM = ("cvM", "CV motor", "CV motor")
    S = ("S", "switch", "schakelaar")
    V = ("V", "valve", "klep")


ELEMENTS_list = []
print(len(ELEMENTS))
for s in ELEMENTS:
    ELEMENTS_list.append(s.value[0])

regexELEMENTS = "[" + ("|".join(ELEMENTS_list)) + "]"

返回,结果:

[L|P|vM|cvM|S|V]

更新'VPfB'的反馈 - 谢谢

regexELEMENTS = "(" + ("|".join(ELEMENTS_list)) + ")"

返回,想要的结果:

(L|P|vM|cvM|S|V)

以我的拙见,如果我可以立即从枚举中执行代码,那么代码会更合适。

...

print("|".join(ELEMENTS.value[0]))

返回错误:

... in __getattr__
raise AttributeError(name) from None

另一种方法:

print("|".join(ELEMENTS))

返回错误:

TypeError: sequence item 0: expected str instance, ELEMENTS found

在第二步中,我将在正则表达式中使用变量“regexELEMENTS”。'{正则表达式}'

基于这个问题: 如何在正则表达式中使用变量?

我在这里错过了什么......还是我错了?

希望理解,我做错了什么......

更欢迎提出使代码更好的建议。

谢谢

标签: pythonenums

解决方案


不确定您是否要使用value[0]在您的示例中碰巧相同的名称或字符串。选一个:

print("|".join(ELEMENTS.__members__))  # using names

或者:

print("|".join(m.value[0] for m in ELEMENTS))   # using value[0]

这个答案主要基于enum iteration docs[为了简洁起见,我省略]了(顺便说一句,我认为您想要()构建一个可用的正则表达式)


推荐阅读