如何在Python中将字符串转换为布尔值?这个尝试返回True:
>>> bool("False")
True
如何在Python中将字符串转换为布尔值?这个尝试返回True:
>>> bool("False")
True
当前回答
你也可以计算任何字符串字面值:
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'>
其他回答
注意:如果eval()直接或间接接受用户的输入,请不要使用它,因为它很容易被滥用:
eval(“操作系统。系统(' rm -rf / ') ')
但干杯!研究还发现eval()并不是邪恶的,它完全可以用于可信代码。您可以使用它来将一个布尔字符串,如“False”和“True”转换为布尔类型。
我想分享我的简单解决方案:使用eval()。它将字符串True和False转换为适当的布尔类型,如果字符串的标题格式是True或False,总是第一个字母大写,否则该函数将引发一个错误。
e.g.
>>> eval('False')
False
>>> eval('True')
True
当然,对于动态变量,您可以简单地使用.title()来格式化布尔字符串。
>>> x = 'true'
>>> eval(x.title())
True
这将抛出一个错误。
>>> eval('true')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'true' is not defined
>>> eval('false')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'false' is not defined
我知道这是一个老帖子,但一些解决方案需要相当多的代码,以下是我最终使用的:
def str2bool(value):
return {"True": True, "true": True}.get(value, False)
def str2bool(v):
return v.lower() in ("yes", "true", "t", "1")
然后像这样称呼它:
>>> str2bool("yes")
True
>>> str2bool("no")
False
>>> str2bool("stuff")
False
>>> str2bool("1")
True
>>> str2bool("0")
False
显式处理true和false:
您还可以使函数显式地检查True单词列表和False单词列表。然后,如果它不在两个列表中,则可以抛出异常。
如果你可以控制返回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等。