簡體   English   中英

驗證函數中的返回語句

[英]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 返回輸入的值(如果它是整數) - 如果不是則引發 ValueError 。 讓我縮短他們使用的 function:

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 function 更改為(您不必定義變量,只需使用 foo 參數)

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

如果輸入類型錯誤,這將引發 TypeError - 並且只需繼續使用 function arguments 如果不是,則無需定義任何變量。 那么為什么他們返回輸入變量,如果他們不修改它,而只是檢查它呢?

一般來說,我同意純驗證函數也可以是void的,即不返回任何內容並在需要時引發異常。

但是,在這種特殊情況下, _check_int_field function 實際上是這樣使用的:

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

所以 function 實際上做的不僅僅是驗證。 在這種情況下,function 返回值是有意義的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM