哪种编码风格更好 / 正确和为什么? 在每个函数中使用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
答案 0 :(得分: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