类型突变在 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)
我需要对输入变量的正确变量类型进行简单检查。所以我做了这样的功能:
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)