如何在Python中将字符串转换为布尔值?这个尝试返回True:

>>> bool("False")
True

当前回答

我知道这是一个老帖子,但一些解决方案需要相当多的代码,以下是我最终使用的:

def str2bool(value):
    return {"True": True, "true": True}.get(value, False)

其他回答

你也可以计算任何字符串字面值:

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'>

JSON解析器在将字符串转换为合理的python类型时也很有用。

>>> import json
>>> json.loads("false".lower())
False
>>> json.loads("True".lower())
True

我们可能需要捕捉'true'不区分大小写,如果是这样的话:

>>> x="TrUE"  
>>> x.title() == 'True'  
True  

>>> x="false"  
>>> x.title() == 'True'  
False  

还要注意,对于任何其他既不是真也不是假的输入,它将返回False

一个很酷,简单的技巧(基于@Alan Marchiori的帖子),但使用yaml:

import yaml

parsed = yaml.load("true")
print bool(parsed)

如果这个范围太广,可以通过测试类型结果进行细化。如果yaml返回的类型是str,那么它就不能转换为任何其他类型(我能想到的类型),所以可以单独处理它,或者让它为真。

我不会对速度做任何猜测,但因为我在Qt gui下使用yaml数据,这有一个很好的对称性。

pydantic有一个优雅的解决方案:

import pydantic

>>> pydantic.parse_obj_as(bool, "true")
True