任何人都知道如何做从字符串转换为布尔值在 Python 中呢?我发现此链接但它看上去不像正确的方式去做。即使用内置的功能,等等。

编辑︰ 有人问我这的原因是因为 int("string"),从这里,我明白。我已尝试使用布尔值 ("string"),但总能得到真。

2009-04-03 19:44:20
问题评论:

为您的布尔值是否使用何种代码?"T","真"、"t"、"真","1"?大量的选项-特定值是您希望转换为布尔值的真/假吗?

谢谢你们,我已寻找"真""假"。

我这其中还包括一些外文单词如"将",为波兰语,只是为了创建一个微库"是的"以普通话中文的计算结果为True如果不显式 true-ish 将计算结果为False建议都是欢迎的。Github 链接︰ github.com/kmonsoor/str2bool

回答:

实际上,只是比较到您希望作为表示 true,所以你可以接受任何字符串︰

s == 'True'

或对一组值的检查︰

s in ['true', '1', 't', 'y', 'yes', 'yeah', 'yup', 'certainly', 'uh-huh']

应谨慎使用以下︰

>>> bool("foo")
True
>>> bool("")
False

空字符串的计算结果为False,但所有其他计算结果为True因此这不应为任何种类的分析的目的。

+ 1︰ 不大可能会比简单s == "True"但我见过人们真实的这一团糟。def convert(s)︰ 如果 s = ="True":,则返回 True;所以将返回 False。

我更喜欢返回 s = ="True",通过 if/其他

如果 s = ="True": 返回 True elif s = ="假": 返回 False 其他︰ 返回引发

@Ed︰ 显示缺乏了解?

好的但也许应该 s.lower()...

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 的单词列表的函数。然后在两个列表中时,会引发异常。

可以使用,而不是v.lower() str(v).lower()做一些增强功能。然后,它可以工作即使它不是字符串,如 1,0

答复︰ 真/假明确处理,您也可以提供一个默认值,如果该字符串不匹配,很像真/假命令行提示工作︰ 继续吗?(y /) N

从 Python 2.6,有现在是ast.literal_eval:

>>> import ast
>>> help(ast.literal_eval)
Help on function literal_eval in module ast:

literal_eval(node_or_string)
    Safely evaluate an expression node or a string containing a Python
    expression.  The string or node provided may only consist of the following
    Python literal structures: strings, numbers, tuples, lists, dicts, booleans,
    and None.

这似乎奏效,只要您确信将字符串为"True" "False":

>>> ast.literal_eval("True")
True
>>> ast.literal_eval("False")
False
>>> ast.literal_eval("F")
Traceback (most recent call last):
  File "", line 1, in 
  File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 68, in literal_eval
    return _convert(node_or_string)
  File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 67, in _convert
    raise ValueError('malformed string')
ValueError: malformed string
>>> ast.literal_eval("'False'")
'False'

我通常不建议这样,但它是完全内置,可能是正确的事情,具体取决于您的需求。

不确定的一般适用这一解决方案,但它是方式的非常好,在常规排序。+ 1 !

+ 1 到目前为止最好的选项实际上分析没有风险评估某些有害的任何文本。

Gaah,这就是 horrifying !再说一遍,您说您不推荐它,和它没有回答问题整齐。好查找 !

遗憾的是,它不能处理这种情况 >>> ast.literal_eval('true') 或 ast.literal_eval('TRUE') 引发 >>> ValueError (格式字符串) 会引发此修复程序很简单但是 ast.literal_eval(to_test.title())

对这个问题,没有好的解决方案,但...哇,literal_eval 是 damn 有用 !字符串列表,dict,等。

只需使用︰

distutils.util.strtobool(some_string)

http://docs.python.org/2/distutils/apiref.html?highlight=distutils.util#distutils.util.strtobool

真值为 y,是的 t,则为 true,并 1;false 值为 n,否,f、 假、 关闭和 0。如果 val 为其他类型,则引发 ValueError。

遗憾的是,这将返回1/0True/False,因此您需要将结果包装在 bool() 以获得实际的布尔值︰ bool(distutils.util.strtobool(some_string))

该函数诱人。如果它处理整数和Nonestr(None)作为输入,那就太完美。

我更愿意这高投票的答案...它是从 stdlib 并完全需要。通常没有理由需要实际的bool而不是1/0只要您并不做坏的东西,像if x == False...,如果您处理的intNones 不需要特殊的函数,您只需检查直接if myint:if not maybe_none_var:

@Secator boolint类的子

这应该是顶部,并接受的答案。

JSON 解析器也是一般情况下将字符串转换为合理 python 类型非常有用。

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

注意是否是小写,此方法才有效。如果它是大写,则不能。您必须调用.lower()

请输入您的翻译

Converting from a string to boolean in Python?

确认取消