在Python中如何将字符串转换为布尔值?以下尝试会返回 True
:
>>> bool("False")
True
False
、0
、0.0
、()
、[]
、{}
)为假,其余都为真。因此,我建议按照以下方式进行转换:def boolify(val):
if (isinstance(val, basestring) and bool(val)):
return not val in ('False', '0', '0.0')
else:
return bool(val)
您还可以评估任何字符串字面量:
import ast
ast.literal_eval('True') # True
type(ast.literal_eval('True')) # <class 'bool'>
ls = '[1, 2, 3]'
ast.literal_eval(ls) # [1, 2, 3]
type(ast.literal_eval(ls)) # <class 'list'>
from distutils import util # to handle str to bool conversion
enable_deletion = 'False'
enable_deletion = bool(util.strtobool(enable_deletion))
def stringToBool(string: str) -> bool:
match(string.lower()):
case 'true':
return True
case 'false':
return False
match语句在C++中等效于switch语句。
这是我编写的版本,将其他解决方案合并为一个。
def to_bool(value):
"""
Converts 'something' to boolean. Raises exception if it gets a string it doesn't handle.
Case is ignored for strings. These string values are handled:
True: 'True', "1", "TRue", "yes", "y", "t"
False: "", "0", "faLse", "no", "n", "f"
Non-string values are passed to bool.
"""
if type(value) == type(''):
if value.lower() in ("yes", "y", "true", "t", "1"):
return True
if value.lower() in ("no", "n", "false", "f", "0", ""):
return False
raise Exception('Invalid value for boolean conversion: ' + value)
return bool(value)
如果传入一个字符串,它期望特定的值,否则会抛出异常。如果没有传入字符串,则让bool构造函数来处理。测试了以下情况:
test_cases = [
('true', True),
('t', True),
('yes', True),
('y', True),
('1', True),
('false', False),
('f', False),
('no', False),
('n', False),
('0', False),
('', False),
(1, True),
(0, False),
(1.0, True),
(0.0, False),
([], False),
({}, False),
((), False),
([1], True),
({1:2}, True),
((1,), True),
(None, False),
(object(), True),
]
str
代替 type('')
。 - pppery使用这个解决方案:
def to_bool(value) -> bool:
if value == 'true':
return True
elif value == 'True':
return True
elif value == 'false':
return False
elif value == 'False':
return False
elif value == 0:
return False
elif value == 1:
return True
else:
raise ValueError("Value was not recognized as a valid Boolean.")
我完全同意@Jacob Gabrielson的解决方案,但问题是ast.literal_eval
只能处理True
和False
的字符串值,而不能处理true
或false
。因此,你只需使用.title()
即可使其正常工作。
import ast
ast.literal_eval("false".title())
# or
ast.literal_eval("False".title())
>>> type(ast.literal_eval("0".title())) <class 'int'>
- sagi如果需要,我们可能需要不区分大小写地捕获“true”:
>>> x="TrUE"
>>> x.title() == 'True'
True
>>> x="false"
>>> x.title() == 'True'
False
还要注意的是,对于任何既不为真也不为假的其他输入,它都会返回False。
x in 'True true'
,这样会更短。但是仍然不好,因为它会把'ue tr'
认作True
... - Neuron我还需要将一个函数的输入更改为bool
类型,主要输入只能是True
或False
字符串。因此,我只需编写以下代码:
def string_to_bool(s):
bool_flag = True
if s == "False":
bool_flag = False
elif s == "True":
bool_flag = True
else:
print("Invalid Input")
return bool_flag
True
和False
,例如Y/N
或y/n
等。我知道这是一篇旧帖子,但有些解决方案需要相当多的代码,这是我最终使用的:
def str2bool(value):
return {"True": True, "true": True}.get(value, False)
bool("string")
时,它总是返回True
...除了空字符串bool("")
。 - FiddleStix