gpt4 book ai didi

python - 对于未知的枚举值要引发什么样的异常?

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:10 25 4
gpt4 key购买 nike

假设有以下类:

class PersistenceType(enum.Enum):
keyring = 1
file = 2

def __str__(self):
type2String = {PersistenceType.keyring: "keyring", PersistenceType.file: "file"}
return type2String[self]

@staticmethod
def from_string(type):
if (type == "keyring" ):
return PersistenceType.keyring
if (type == "file"):
return PersistenceType.file
raise ???

作为一个 python 菜鸟,我只是想知道:这里应该引发哪种特定类型的异常?

最佳答案

简短的回答是ValueError :

Raised when a built-in operation or function receives an argument that has the right type but an inappropriate value, and the situation is not described by a more precise exception such as IndexError.

较长的答案是该类几乎不应该存在。考虑:

class PersistenceType(enum.Enum):
keyring = 1
file = 2

这为您提供了自定义枚举所做的一切:

  • 要获得与自定义 __str__ 方法相同的结果,只需使用 name 属性:

    >>> PersistenceType.keyring.name
    'keyring'
  • 要使用其名称获取枚举成员,请将枚举视为字典:

    >>> PersistenceType['keyring']
    <PersistenceType.keyring: 1>

使用 Enum.enum 的内置功能可为您带来几个优势:

  1. 您编写的代码少得多。

  2. 您不会在整个地方重复枚举成员的名称,因此如果您在某个时候修改它,您将不会遗漏任何内容。

  3. 您的枚举的用户以及使用它的代码的读者不需要记住或查找任何自定义方法。

如果您是从 Java 转到 Python,请始终牢记:

Python Is Not Java (或者,停止编写这么多代码)

Guido1 has a time machine (或者,停止编写这么多代码)


1 ……或者在本例中是 enum 模块的作者 Ethan Furman。

关于python - 对于未知的枚举值要引发什么样的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43252708/

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