将参数限制为python中的特定值

nin*_*o64 7 python

如果我有一个字符串参数的python函数需要在一个特定的值列表中,那么处理这个问题的最佳方法是什么?是否存在在文档字符串或任何内容中表达此内容的约定?

例如.

def makeShape(shape):
   assert shape in ["circle", "square", "triangle"]
Run Code Online (Sandbox Code Playgroud)

有没有更好的方式来表达形状应该始终是这三个值之一?

Blu*_*Ice 10

你可以使用一个enum正确的形状:

class rightShape(Enum):
    circle = 1
    square = 2
    triangle = 3

def makeShape(rightShape):
    # code in function
Run Code Online (Sandbox Code Playgroud)

如果你尝试传递函数除了a ,或之外circle,这将抛出一个诚实到善的错误.squaretriangle

  • 但这不会引发错误?它只是因为 Python 的鸭子类型而接受任何东西?这个答案是不是根本就是错误的? (3认同)
  • @jrennie但是,它已从3.4版本移植到早期版本 - 请参阅[此问题](http://stackoverflow.com/questions/36932/how-can-i-represent-an-enum-in-python). (2认同)

jre*_*nie 3

如果这是一个真正的错误,您应该提出异常。我认为 TypeError 将是一个合理的选择,但您可能想定义自己的。

assert声明是为了发展。请注意,-O使用参数时它们会被忽略,因此不应依赖它们来捕获错误。