def truthy(v):
if issubclass(v.__class__, numbers.Number):
return bool(int(v))
if isinstance(v, basestring):
vl = v.lower()[0]
if vl == 'y' or vl == 't':
return True
return False发布于 2013-12-21 10:27:29
我现在不能测试这个,但是在我看来,isinstance似乎是非常非质子的。假设您的原始逻辑是正确的,为什么不:
def truthy(v):
try:
return bool(int(v))
except ValueError:
pass
try:
first = v.lower()[0]
return (first == 'y') or (first == 't')
except AttributeError:
pass
return False这样,您就不需要担心缺少任何类型--如果它可以转换为int,或者如果它实现了lower()方法,就会捕获它。
发布于 2013-12-18 21:49:36
不如:
accepted_truthy_characters = {'y', 't'}
def truthy(value):
if isinstance(value, basestring):
return value and value[0].lower() in accepted_truthy_characters
return bool(value)在Python3.x中,基字符串不能工作,而是需要isinstance(value, str)。
您忽略的一件事是,value可能是一个字符串,但它可能是空的,这将给您留下一个IndexError。
Python的bool()会为您检查一个int,所以我不认为您需要检查它是否是一个数字,用int()和bool()进行转换,除非我遗漏了一些关于用例的内容。
出于好奇,你为什么需要这个?您正在检查用户输入吗?那不是永远都是一根线吗?在这种情况下,检查几个允许的“正”字符串不是更好吗?
https://codereview.stackexchange.com/questions/37698
复制相似问题