强制执行特定值列表的参数

时间:2014-09-15 18:21:28

标签: python function

强制函数为给定参数获取一组特定值的pythonic方法是什么?例如,有一个函数:

def results(status,data):

我想限制参数' status'到一组值,如0,1或99。

2 个答案:

答案 0 :(得分:8)

您需要检查函数内的值:

def results(status, data):
    valid = {0, 1, 99}
    if status not in valid:
        raise ValueError("results: status must be one of %r." % valid)

这里,valid是一个集合,因为我们唯一关心的是status是否是集合的成员(例如,我们对顺序不感兴趣)。为避免每次使用该函数时重新创建集合,您可能将其定义为“常量” 1 全局:

VALID_STATUS = {0, 1, 99}

def results(status, data):
    if status not in VALID_STATUS:
        raise ValueError("results: status must be one of %r." % VALID_STATUS)

使用示例:

>>> results(7, [...])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in results
ValueError: results: status must be one of {0, 1, 99}.

总是尝试提升the most appropriate exception你可以 - ValueError告诉调用者该函数比Exception更能发生什么,例如。


1 它不是真正的常量,但按照惯例,Python中的ALL_UPPERCASE变量名称被认为是常量。

答案 1 :(得分:5)

如果status是有效值,您可以在函数内检查,如果不是,则引发异常。

def results(status,data):
    list_valid_status = [0, 1, 99]
    # list_valid_status = (0, 1, 99) # could be a tuple so it doesn't get modified by accident
    if status not in list_valid_status:
        raise ValueError("Wrong status")