在 Python Enum 中出现 ValueError,当以逗号分隔时。

18 浏览
0 Comments

在 Python Enum 中出现 ValueError,当以逗号分隔时。

考虑以下代码。\n当类RottenFruit用逗号分隔时,Python如何解释它?这是合法的吗?如果是,有什么用途?\n

from enum import Enum
class Fruit(Enum):
     Apple = 4
     Orange = 5
     Pear = 6 
a = Fruit(5)
class RottenFruit(Enum):
     Apple = 4,
     Orange = 5,
     Pear = 6
print(Fruit(5))
print(RottenFruit(5))

\n输出:\n

Fruit.Orange
Traceback (most recent call last):
  File "...\tests\sandbox.py", line 15, in 
    print(RottenFruit(5))
  File "...\AppData\Local\Programs\Python\Python36\lib\enum.py", line 291, in __call__
    return cls.__new__(cls, value)
  File "...\AppData\Local\Programs\Python\Python36\lib\enum.py", line 533, in __new__
    return cls._missing_(value)
  File "...\AppData\Local\Programs\Python\Python36\lib\enum.py", line 546, in _missing_
    raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 5 is not a valid RottenFruit

0
0 Comments

使用Python的Enum时,如果在定义枚举值时使用逗号进行分隔会导致ValueError错误。下面是出现这个问题的原因和解决方法。

问题原因:

在代码中,定义了一个枚举类RottenFruit,其中Apple和Orange都被定义为长度为1的元组,而Pear则是一个整数。在Python中,可以同时为多个变量赋值,这是Python的一个特性。另外,Python的解析规则允许在列表中使用尾随逗号,这样可以使多行列表的格式看起来更干净,并且可以用(1,)的方式定义一个长度为1的元组。然而,在使用Python的Enum时,将这两个特性结合起来使用就会导致问题。

解决方法:

为了避免这个问题,需要注意在定义枚举值时不要使用逗号进行分隔。确保枚举值的定义只包含一个值即可。修改后的代码如下所示:

class RottenFruit(Enum):
    Apple = 4
    Orange = 5
    Pear = 6

在使用Python的Enum时,如果在定义枚举值时使用逗号进行分隔,会导致ValueError错误。这个问题的原因是将Python的多重赋值和尾随逗号的解析规则结合使用所导致的。为了避免这个问题,需要注意在定义枚举值时不要使用逗号进行分隔。

0