如何在Python中将字符串转换为布尔值?这个尝试返回True:
>>> bool("False")
True
如何在Python中将字符串转换为布尔值?这个尝试返回True:
>>> bool("False")
True
当前回答
我必须这么做……所以,也许姗姗来迟——但有人可能会发现它很有用
def str_to_bool(input, default):
"""
| Default | not_default_str | input | result
| T | "false" | "true" | T
| T | "false" | "false" | F
| F | "true" | "true" | T
| F | "true" | "false" | F
"""
if default:
not_default_str = "false"
else:
not_default_str = "true"
if input.lower() == not_default_str:
return not default
else:
return default
其他回答
实际上,你只是将字符串与你期望接受的表示true的字符串进行比较,所以你可以这样做:
s == 'True'
或者检查一大堆值:
s.lower() in ['true', '1', 't', 'y', 'yes', 'yeah', 'yup', 'certainly', 'uh-huh']
使用以下物品时请谨慎:
>>> bool("foo")
True
>>> bool("")
False
空字符串的值是False,但其他的值都是True。所以这个不应该用于任何解析目的。
我完全同意@Jacob\ Gabrielson的解决方案,但事情是ast.literal_eval只适用于True和False的字符串值,而不是True或False。所以你只需要使用.title()让它工作
import ast
ast.literal_eval("false".title())
# or
ast.literal_eval("False".title())
我喜欢使用三元运算符,因为它对于不应该超过一行的东西来说更简洁一些。
True if my_string=="True" else False
你可以这样做
my_string = "false"
val = (my_string == "true")
parens中的位将计算为False。这是另一种不需要进行实际函数调用的方法。
pydantic有一个优雅的解决方案:
import pydantic
>>> pydantic.parse_obj_as(bool, "true")
True