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

>>> bool("False")
True

当前回答

如果你可以控制返回true/false的实体,一种选择是让它返回1/0而不是true/false,那么:

boolean = bool(int(response))

额外的转换为int处理来自网络的响应,这些响应总是字符串。

2021年更新:“which are always string”——这是一个幼稚的观察。它取决于库使用的序列化协议。高级库(大多数web开发人员使用的库)的默认序列化通常是在序列化为字节之前转换为字符串。然后在另一边,它从字节反序列化为字符串,所以你丢失了任何类型信息。

其他回答

我还被要求将一个函数的输入更改为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

你也可以检查它是否有更短的真假,如Y/N或Y/N等。

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

import pydantic

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

dict(实际上是defaultdict)为你提供了一种非常简单的方法:

from collections import defaultdict
bool_mapping = defaultdict(bool) # Will give you False for non-found values
for val in ['True', 'yes', ...]:
    bool_mapping[val] = True

print(bool_mapping['True']) # True
print(bool_mapping['kitten']) # False

将这个方法定制为您想要的确切转换行为非常容易——您可以用允许的Truthy和Falsy值填充它,并在没有找到值时让它引发异常(或返回None),或默认为True,或默认为False,或任何您想要的。

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

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

我完全同意@Jacob\ Gabrielson的解决方案,但事情是ast.literal_eval只适用于True和False的字符串值,而不是True或False。所以你只需要使用.title()让它工作

import ast
ast.literal_eval("false".title())
# or
ast.literal_eval("False".title())