1
XYxe 2017-06-20 13:13:30 +08:00
一个比较粗略的实现:
def not_null(*varnames): def outer(func): def inner(*args, **kwargs): args_name = func.__code__.co_varnames args_cnt = func.__code__.co_argcount # 没用到 flag = True for name in varnames: # 这里还要考虑 varnames 中有 args 中没有的参数 index = args_name.index(name) # 还可以加上考虑 kwargs 参数 flag = flag and (args[index] is not None) if not flag: raise TypeError('something is None') result = func(*args, **kwargs) return result return inner return outer |
2
XYxe 2017-06-20 13:17:37 +08:00
格式乱了,贴个图吧
另外在用的时候要:@not_null('param1', 'param2') |
3
araraloren 2017-06-20 14:42:56 +08:00
@XYxe 返回值也要判断一下,严格的定义肯定实现不了~~
|
4
XYxe 2017-06-20 14:59:18 +08:00
@araraloren #3 哎?判断返回值那检查一下倒数第四行的 result 不就可以了吗?
|
5
araraloren 2017-06-20 16:04:41 +08:00
@XYxe 是的,不要在意后面那句话,我看错了
|