Get the name of the variable during iteration
我有一个函数允许许多选项作为布尔值,例如:
1 2 | def my_func(req, option_a=False, option_b=True, option_c=True): pass |
我想确保为这些变量添加了布尔值,因此我可以进行如下简单检查:
1 2 3 4 | def my_func(req, option_a=False, option_b=True, option_c=True): for param in [option_a, option_b, option_c]: if not isinstance(param, bool): raise ValueError(f'Unexpected value {param} for X. A boolean value is required') |
显然,这并不能提供很多关于哪个参数值错误的信息。因此,我想知道是否可以获取变量的名称,以便用变量名替换上面代码段中的
Unexpected value bananas for option_b. A boolean value is required
这在Python中是可能的吗?
如果您接受在函数中使用
1 2 3 4 5 6 7 8 9 10 11 12 | def my_func(req, **kwargs): default_params = {"option_a":False,"option_b":True,"option_c":True} for name,dpv in default_params.items(): if name in kwargs: param = kwargs[name] if not isinstance(param, type(dpv)): raise ValueError('Unexpected value {param} for {name}. A {type} value is required'.format(param=param,name=name,type=dpv.__class__.__name__)) else: kwargs[name] = dpv print(kwargs) my_func(12,option_a=False,option_b=False,option_c=True) |
此代码具有参数及其默认值。如果类型与传递的参数之一不匹配,则会出现错误。
如果省略某个值,则会手动为
这适用于布尔型,也适用于其他类型(当然,布尔型是整数,所以它允许整数通过,除非通过严格的
一切皆有可能!
1 2 3 4 5 | def my_func(req, option_a=False, option_b=True, option_c=True): for param_name in ['option_a', 'option_b', 'option_c']: param = locals()[param_name] if not isinstance(param, bool): raise ValueError(f'Unexpected value {param} for {param_name}. A boolean value is required') |
另一种选择是使用一些