Python 验证函数中的返回语句

Python 验证函数中的返回语句,python,validation,return,conventions,typechecking,Python,Validation,Return,Conventions,Typechecking,我仔细查看了一下,偶然发现了一些类型检查函数(我简化了它们,原来的is\u check\u int\u字段) check_int返回输入的值(如果是整数)-如果不是,则引发ValueError。让我缩短他们使用的功能: def check_int(value): if isinstance(value, int): return value if not isinstance(value, int): raise TypeError('intege

我仔细查看了一下,偶然发现了一些类型检查函数(我简化了它们,原来的is\u check\u int\u字段)

check_int返回输入的值(如果是整数)-如果不是,则引发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))
我的问题是:返回声明背后的含义是什么?当然,您可以将其作为

def check_int(value):
    if not isinstance(value, int):
        raise TypeError('integer argument expected, got %s' % value)
这会将foo函数更改为(不必定义变量,只需使用foo参数)


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

一般来说,我同意纯验证函数也可以是无效的,即不返回任何内容,如果需要,则引发异常

然而,在这种特殊情况下,
\u check\u int\u field
函数实际上是这样使用的:

year = _check_int_field(year)
这是有意义的,因为在
\u check\u int\u字段中,它们执行以下操作:

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

因此,函数实际上不仅仅是验证。在这种情况下,函数返回值是有意义的

你是说?因为在某些情况下,它确实会返回一些东西,而不仅仅是它的参数。你的“简化”毫无用处;您发布的版本可能会被替换,因为它不能代表真实的内容。是的,但它只返回值、值、\uuuuuu index\uuuuuuuuuu()或值、\uuuuuuuuu name()\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。索引和名称提供了哪些需要返回语句的功能?正如@rdas在这里指出的,您遗漏了代码中相当重要的一部分,主要是
try
块。这可能会更改
的值。如果这是一个简单的类型检查,您可以使用
assert-isinstance(value,int),“%s的类型应该是int”%s
,而不是为此定义函数。如果函数返回一个值而您不需要它,您可以随意忽略它。如果函数不返回值,但您需要它,那么您就倒霉了。
返回
只是让它更通用。考虑一个调用,如<代码>校验>(x+1)< /代码>;如果它是有效的,你就没有一个有效的引用,你需要重新计算它。你说“不应该真正改变变量”是什么意思?返回参数的属性而不是参数本身如何不改变变量?!谢谢你的澄清!这是(某种程度上)我所期待的——我只是不太理解int和index的用途,这导致了我的困惑
year = _check_int_field(year)
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