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

在python中将参数限制为特定值,python,Python,如果我有一个带字符串参数的python函数,它需要在一个特定的值列表中,那么处理这个问题的最佳方法是什么?在docstring或其他文件中表达这一点是否有约定 例如 有没有更好的方法来表示形状应该始终是这三个值之一?如果这是一个真正的错误,您应该提出一个异常。我认为TypeError是一个合理的选择,但您可能需要定义自己的错误 assert语句用于开发。请注意,当使用-O参数时,它们会被忽略,因此不应依赖它们来捕获错误。您可以使用枚举来获取正确的形状排序: class rightShape(En

如果我有一个带字符串参数的python函数,它需要在一个特定的值列表中,那么处理这个问题的最佳方法是什么?在docstring或其他文件中表达这一点是否有约定

例如


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

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


assert
语句用于开发。请注意,当使用
-O
参数时,它们会被忽略,因此不应依赖它们来捕获错误。

您可以使用
枚举来获取正确的形状排序:

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

def makeShape(rightShape):
    # code in function

如果您试图传递函数,而不是
正方形
,或
三角形

,如果此函数是类的一部分,可能会使该列表成为类常量,那么这将抛出一个诚实的错误。。。除此之外,在我看来还不错。您能澄清一下为什么要使用字符串,以及您的基本约束是什么吗?@blue ice建议的enum想法是您真正需要的吗?好吧-也许我的示例有点误导,因为在这种情况下,您可以为每个形状创建一个类。我的问题(这一次,似乎出现了很多问题)是,我有一个以三种模式运行的界面:加载、保存和查看。我想传递一个“mode”参数,但它只能是这三个值中的一个。Enum解决方案非常好,但不幸的是,我使用的是python2.6(在maya和nuke中)。@ninhenzo64在我回答的一篇评论中指出,
Enum
s已通过pypi后端口到2.6。应该可以。因为最新的Ubuntu只有3.3版本,我认为值得注意的是Enum是python 3.4中的新版本。@jrennie但是,它已经从3.4版本向后移植到了早期版本-请参阅。
class rightShape(Enum):
    circle = 1
    square = 2
    triangle = 3

def makeShape(rightShape):
    # code in function