我希望解析关键字参数,以确定它们是否也引用类型,例如下面的情况:
from inspect import isclass
def convert(converting, **kwargs):
for key, value in kwargs.items():
if value and isclass(eval(key[1:])):
return(eval(key[1:])(converting))
string = "Hello!"
print(convert(string, _list = True))
我很清楚eval
对未知字符串有安全问题,这就是为什么我正在寻找一种更安全的方法来根据关键字名称确定类型。
根据a_cuest在这里的评论,可以通过import builtins; isclass(getattr(builtins, 'str'))
检查内置类型,但我仍然对如何检查其他类感到困惑。也许isclass(getattr(globals(), key[1:]))
?
Python通常使用LEGB查找名称。由于没有非本地用户,因此可以忽略E
。你知道你没有本地名称,所以L
也不见了。因此,等效的查找实际上是对globals
的调用和对builtins
的搜索。
如果你只关心钥匙,你就不需要字典了。这样,你就可以显式地传入简单的字符串,而不需要玩带有额外字符的游戏:
import builtins
from inspect import isclass
def convert(target, *names):
for name in names:
obj = globals().get(name, getattr(builtins, name, None))
if isclass(obj):
return obj(target)
return converting