Konvertierung von String → Bool-Wert in Python Consideration

Der Anfang der Sache

Ich möchte einen String-Wert von "false" in einen Bool-Wert von False konvertieren. Gibt es einen guten Weg?

Wenn Sie etwas weiter gehen, sieht es aus wie Boolean.Parse in C #. Gibt es irgendetwas? Das ist.

Fazit zu diesem Zeitpunkt

Ich frage mich, ob distutils.util.strtobool () + bool (), das später beschrieben wird, gelöscht werden sollte.

Vorherige Schlussfolgerung 1

Vorher habe ich darüber nachgedacht.

def CBool( value ):
    if isinstance( value, str ) and value.lower() == "false":
        return False
    return bool( value )
$ python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def CBool( value ):
...     if isinstance( value, str ) and value.lower() == "false":
...         return False
...     return bool( value )
... 
>>> CBool( "False" )
False
>>> CBool( "false" )
False
>>> CBool( 0 )
False
>>> CBool( [] )
False
>>> CBool( "" )
False
>>> CBool( "True" )
True
>>> CBool( 1 )
True
>>> CBool( [ "hoge" ] )
True
>>> CBool( "hoge" )
True

Versuch

integrierte Funktion bool ()

Damit kann das in "Der Anfang der Sache" erwähnte Problem nicht gelöst werden.

Gemäß der offiziellen Python 2.6-Dokumentation 5. Integriert> 5.1. Wahrheitstest können die folgenden Werte falsch sein: Sonst ist es wahr.

$ python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> bool( "False" )
True

json.loads()

Der "Anfang der Dinge" kann behoben werden, unterscheidet sich jedoch von der ursprünglichen Verwendung von json.loads (), sodass es für andere möglicherweise schwierig ist, ihn zu lesen. Da davon ausgegangen wird, dass der JSON-Wert eingegeben wird, wird er nur übergeben, wenn er niedriger als "false" ist. Bei Einstellung auf "False" tritt ein Wertefehler auf.

$ python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> json.loads( "false" )
False
>>> json.loads( "False" )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.6/json/decoder.py", line 338, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

Verwenden Sie das Modul ast

Dies kann auch den "Anfang der Dinge" beseitigen. Außerdem unterscheidet sich ast.literal_eval () von simple eval () darin, dass die Konvertierung auf Literalwerte eingegrenzt wird. Daher ist das Risiko gering, selbst wenn Variablen analysiert werden, die nicht wissen, wo sich die Knochen befinden. "False" kann jedoch nicht analysiert werden.

$ python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ast
>>> ast.literal_eval( "False" )
False
>>> ast.literal_eval( "false" )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/ast.py", line 68, in literal_eval
    return _convert(node_or_string)
  File "/usr/lib64/python2.6/ast.py", line 67, in _convert
    raise ValueError('malformed string')
ValueError: malformed string

Bewerten Sie die Zeichenfolge

Dies kann auch den "Anfang der Dinge" beseitigen. Die Absicht ist auch leicht zu verstehen. Es kann auch den Unterschied zwischen Groß- und Kleinschreibung absorbieren. Es scheint jedoch besser, daraus eine Methode zu machen und sie irgendwo zusammenzustellen. Wenn jedoch eine andere Variable als eine Zeichenfolge eingegeben wird, tritt ein Fehler auf.

$ python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> False if "False".lower() == "false" else True
False
>>> False if "false".lower() == "false" else True
False
>>> False if "True".lower() == "false" else True
True

Verwenden Sie distutils.util.strtobool

Dies kann auch den "Anfang der Dinge" beseitigen. Die Absicht ist auch leicht zu verstehen. Es misst auch Zeichenfolgen mit der Absicht von Wahr / Falsch. Wenn jedoch eine Zeichenfolge eingegeben wird, die nicht das Konvertierungsziel ist, tritt eine Ausnahme auf. Nehmen Sie sie daher ordnungsgemäß auf.

$ python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import distutils.util
>>> distutils.util.strtobool( "False" )
0
>>> distutils.util.strtobool( "false" )
0
>>> bool( distutils.util.strtobool( "False" ) )
False
>>> bool( distutils.util.strtobool( "No" ) )
False
>>> distutils.util.strtobool( "True" )
1
>>> bool( distutils.util.strtobool( "True" ) )
True
>>> bool( distutils.util.strtobool( "" ) )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/distutils/util.py", line 424, in strtobool
    raise ValueError, "invalid truth value %r" % (val,)
ValueError: invalid truth value ''

abschließend

――Wenn es einen anderen guten Weg gibt, hinterlassen Sie bitte einen Kommentar.

Recommended Posts

Konvertierung von String → Bool-Wert in Python Consideration
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
[Python] Bool-Wertinversion in einer Zeile
String-Manipulation in Python
String-Objektmethoden in Python
Berechnung des Scherspielwerts in Python
Datumsmanipulation von Strings in Python
6 Möglichkeiten zum Stringen von Objekten in Python
Erstellen Sie eine zufällige Zeichenfolge in Python
Python-String
Vergleich japanischer Konvertierungsmodule in Python3
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Python: Strings kombinieren
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Python-String-Format
SendKeys in Python
Python String Slice
Einbetten von Variablen in Python-Strings
DL, Bytewert und Löschen der Datei in Python3
Projekt Euler # 8 "Maximales Produkt in Anzahl Zeichenfolge" in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Python2-Zeichenfolgentyp
Python-String-Format
Konstante in Python
Python # String-Typ
nCr in Python.
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
json.dumping Keine in Python gibt die Zeichenfolge null zurück
Geben Sie eine kurze URL-ähnliche Zeichenfolge in Python aus
Quad-Tree in Python
Fügen Sie ein Objekt in eine Zeichenfolge in Python ein
Reflexion in Python
Chemie mit Python
Python-String-Inversion