0

哪种编码风格更好/正确为什么?在每个函数中使用 assert 语句:

def fun_bottom(arg):
    assert isinstance(arg, int)
    #blah blah

def fun_middle(arg):
    assert isinstance(arg, int)
    fun_bottom(arg)
    #blah blah

def fun_top(arg):
    assert isinstance(arg, int)
    fun_middle(arg)
    #blah blah

或者,因为我们知道在 fun_bottom 函数中检查了 arg 的类型,所以在 fun_middle 和 fun_top 中省略断言?或者也许还有另一种解决方案?

编辑#1
哎哟,我被误解了。我只是以 assert isinstance(arg, int) 为例。我将重写问题:

使用哪一个:

选项 1:检查参数是否满足每个函数中的函数要求:

def fun_bottom(arg):
    assert arg > 0
    #blah blah

def fun_middle(arg):
    assert arg > 0
    fun_bottom(arg)
    #blah blah

def fun_top(arg):
    assert arg > 0
    fun_middle(arg)
    #blah blah

选项 2:因为我们知道在最底层函数中检查了参数,所以我们在中间函数和顶层函数中不做断言:

def fun_bottom(arg):
    assert arg > 0
    #blah blah

def fun_middle(arg):
    fun_bottom(arg)
    #blah blah

def fun_top(arg):
    fun_middle(arg)
    #blah blah
4

1 回答 1

2

我会建议一种更 Pythonic 的做事方式,我会更喜欢:

def fun_fun(some_int): # function that takes hopefully an int/float
    try: # not sure if we got the correct value
        return_value = some_int + 4 % 4 # mathz
        return return_value # return mathz
    except TypeError: # if we didn't get an int/float we'd get this
        return None # So you can return None or do what you like

请参阅:http ://docs.python.org/2/tutorial/errors.html

编辑:

也许你想要:

def fun_bottom(arg):
    if arg > 0:
        #blah blah
    else:
        #foo

Assert 不应该在您想要的庄园中使用,请阅读: http ://wiki.python.org/moin/UsingAssertionsEffectively

于 2013-05-14T22:23:30.540 回答