Return 验证函数中的语句

Return statements in validation functions

我在浏览 https://github.com/python/cpython/blob/master/Lib/datetime.py 时偶然发现了一些类型检查函数(我简化了它们,原来是 _check_int_field)

def foo(year, month, day):
    year = check_int(year)
    month = check_int(month)
    day = check_int(day)

check_int returns 输入的值(如果它是整数) - 如果不是,则引发 ValueError。让我缩短他们使用的功能:

def check_int(value):
    if isinstance(value, int):
        return value
    if not isinstance(value, int):
        raise TypeError('integer argument expected, got %s' % type(value))

我的问题是:return 语句背后的含义是什么?当然,您可以将其实现为

def check_int(value):
    if not isinstance(value, int):
        raise TypeError('integer argument expected, got %s' % value)

这会将 foo 函数更改为(您不必定义变量,而只需使用 foo 参数)

def foo(year, month, day):
    check_int(year)
    check_int(month)
    check_int(day)

如果输入类型错误,这将引发 TypeError - 如果输入类型错误,则只需继续使用函数参数,而无需定义任何变量。那么为什么他们 return 输入变量,如果他们不修改它,而只是检查它呢?

总的来说,我同意纯验证函数也可以是 void,即 return 什么都没有,如果需要则引发异常。

然而,在这种特殊情况下,_check_int_field 函数实际上是这样使用的:

year = _check_int_field(year)

这是有道理的,因为在 _check_int_field 他们这样做:

try:
    value = value.__int__()
except AttributeError:
    pass
else:
    if not isinstance(value, int):
        raise TypeError('__int__ returned non-int (type %s)' %
                        type(value).__name__)
    return value

所以这个函数实际上做的不仅仅是验证。在这种情况下,函数 return 值是有意义的。