检查字符串是否为类型

Check if string is type

我希望解析关键字参数以确定它们是否也引用类型,例如以下情况:

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 对未知字符串存在安全问题,这就是为什么我正在寻找一种更安全的方法来根据关键字名称确定类型的原因。

可以通过 import builtins; isclass(getattr(builtins, 'str')) 检查内置类型,按照 a_guest's comment here,但我仍然对如何检查其他 类 感到困惑。也许 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