Преобразование из строки в логическое значение в Python? - PullRequest
594 голосов
/ 03 апреля 2009

Кто-нибудь знает, как сделать преобразование из строки в логическое значение в Python? Я нашел эту ссылку . Но это не похоже на правильный способ сделать это. То есть использование встроенного функционала и т. д.

EDIT:

Причина, по которой я спросил это, заключается в том, что я выучил int("string") отсюда. Я пытался bool("string"), но всегда получал True.

>>> bool("False")
True

Ответы [ 28 ]

0 голосов
/ 29 апреля 2010
def str2bool(str):
  if isinstance(str, basestring) and str.lower() in ['0','false','no']:
    return False
  else:
    return bool(str)

idea: проверьте, хотите ли вы, чтобы строка была оценена как False; в противном случае bool () возвращает True для любой непустой строки.

0 голосов
/ 23 июля 2018

Если у вас есть контроль над объектом, который возвращает true / false, один из вариантов - вернуть 1 / 0 вместо true / false, тогда:

boolean_response = bool(int(response))

Дополнительное приведение к int обрабатывает ответы из сети, которые всегда являются строковыми.

0 голосов
/ 22 ноября 2017

Используя встроенную в Python функцию eval() и метод .capitalize(), вы можете преобразовать любую строку "истина" / "ложь" (независимо от начальной заглавной буквы) в истинное логическое значение Python.

Например:

true_false = "trUE"
type(true_false)

# OUTPUT: <type 'str'>

true_false = eval(true_false.capitalize())
type(true_false)

# OUTPUT: <type 'bool'>
0 голосов
/ 03 ноября 2016

Мне просто нужно было сделать это ... так что, возможно, опоздал на вечеринку - но кто-то может найти это полезным

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
0 голосов
/ 29 января 2012

Вот что-то, что я собрал, чтобы оценить истинность строки:

def as_bool(val):
 if val:
  try:
   if not int(val): val=False
  except: pass
  try:
   if val.lower()=="false": val=False
  except: pass
 return bool(val)

Более или менее такие же результаты, как при использовании eval, но безопаснее.

0 голосов
/ 20 февраля 2019

Использовать пакет str2bool pip install str2bool

0 голосов
/ 13 июня 2019

Если вы мне нравитесь, просто нужно логическое значение из переменной, которая является строкой. Вы можете использовать дистилляции, как упоминалось ранее @jzwiener. Однако я не мог импортировать и использовать модуль, как он предложил.

Вместо этого я использую его таким образом на python3.7

distutils string to bool in python

from distutils import util # to handle str to bool conversion
enable_deletion = 'False'
enable_deletion = bool(util.strtobool(enable_deletion))

distutils является частью библиотеки python std, поэтому не требует установки. Что здорово! ?

0 голосов
/ 12 июля 2009

вот волосатый, построенный таким образом, чтобы получить много одинаковых ответов. Обратите внимание, что хотя python считает "" ложным, а все остальные строки - истиной, TCL имеет совершенно другое представление о вещах.

>>> import Tkinter
>>> tk = Tkinter.Tk()
>>> var = Tkinter.BooleanVar(tk)
>>> var.set("false")
>>> var.get()
False
>>> var.set("1")
>>> var.get()
True
>>> var.set("[exec 'rm -r /']")
>>> var.get()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 324, in get
    return self._tk.getboolean(self._tk.globalgetvar(self._name))
_tkinter.TclError: 0expected boolean value but got "[exec 'rm -r /']"
>>> 

Хорошая вещь об этом - то, что это довольно простое значение, которое вы можете использовать. Он ленив в преобразовании строк в значения, и он гигиеничен в отношении того, что он принимает и отвергает (обратите внимание, что, если вышеприведенное выражение было дано в приглашении tcl, оно стерло бы жесткий диск пользователя).

Плохо то, что требуется наличие Tkinter, что обычно, но не всегда верно, и, что более важно, требует создания экземпляра Tk, который является сравнительно тяжелым.

То, что считается истинным или ложным, зависит от поведения Tcl_GetBoolean, которое учитывает 0, false, no и off, чтобы быть ложным и 1, true, yes и on чтобы быть правдой, без учета регистра. Любая другая строка, включая пустую строку, вызывает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...