类型突变在 python 中工作很奇怪,为什么?

Type mutations work strange in python, why?

我需要对输入变量的正确变量类型进行简单检查。所以我做了这样的功能:

def is_good_value(some_value, value_type="numeric"):
        """Check if value is of right type"""

        allowed_types = {
            "numeric" : [float, int],
            "string"  : [str],
            "file"    : [os.path.isfile]
        }

        for each_type in allowed_types[value_type]:
            try:
                each_type(some_value)
            except: exit(print(f"Wrong type: {some_value}, should be {allowed_types[value_type]}"))

如果我尝试检查:

is_good_value("1")

我得到异常。显然,这是因为我传递了字符串“1”。

但是如果我进行 int("1")float("1") 突变,一切都很好,因为这个值可以转换为这些类型。

如何修改 def 以获得与简单变异操作相同的结果?

听起来您正在寻找 isinstance(并且 isfile 用于该文件大小写)...

allowed_types = {
    "numeric": lambda v: isinstance(v, (float, int)) and not isinstance(v, bool),
    "string": lambda v: isinstance(v, str),
    "file": os.path.isfile,
}
def is_good_value(some_value, value_type="numeric"):
    return allowed_types[value_type](some_value)