Conversion de chaîne → valeur booléenne en Python Considération

Le début de l'affaire

Je veux convertir une valeur String de "false" en une valeur booléenne de False, y a-t-il un bon moyen?

En allant un peu plus loin, il ressemble à Boolean.Parse en C #. Y a-t-il quelque chose? C'est.

Conclusion à ce stade

Je me demande si distutils.util.strtobool () + bool (), qui sera décrit plus tard, doit être abandonné.

Conclusion précédente 1

Avant ça, j'y pensais.

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

Procès

fonction intégrée bool ()

Avec cela, le problème mentionné dans "Le début de la question" ne peut pas être résolu.

Selon la documentation officielle de Python 2.6 5. Built-in> 5.1. Truth Test, les valeurs suivantes peuvent être fausses: , Sinon, c'est vrai.

$ 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()

Le "début des choses" peut être résolu, mais il est différent de l'utilisation originale de json.loads (), donc il peut être difficile pour les autres de comprendre l'intention. De plus, comme il est supposé que la valeur JSON sera entrée, elle ne passera pas à moins qu'elle ne soit inférieure à "false". S'il est défini sur "False", une erreur de valeur se produira.

$ 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

ast Utilisez le module

Cela peut également éliminer le «début des choses». De plus, ast.literal_eval () est différent de simple eval () en ce que la conversion est réduite à des valeurs littérales, le fait est donc que le risque est faible même lors de l'analyse de variables qui ne savent pas où se trouvent les os. Cependant, "false" ne peut pas être analysé.

$ 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

Évaluer la chaîne

Cela peut également éliminer le «début des choses». L'intention est également facile à comprendre. Il peut également absorber la différence entre les majuscules et les minuscules. Cependant, il semble préférable d'en faire une méthode et de la mettre ensemble quelque part. Cependant, si une variable autre qu'une chaîne de caractères est entrée, une erreur se produit.

$ 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

Utilisez distutils.util.strtobool

Cela peut également éliminer le «début des choses». L'intention est également facile à comprendre. Il mesure également les chaînes avec l'intention de True / False. Cependant, si une chaîne de caractères qui n'est pas la cible de conversion est saisie, une exception se produira, alors sélectionnez-la correctement.

$ 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 ''

en conclusion

――S'il existe un autre bon moyen, veuillez laisser un commentaire.

Recommended Posts

Conversion de chaîne → valeur booléenne en Python Considération
Conversion de la chaîne <-> date (date, datetime) en Python
[Python] Inversion de valeur booléenne en une ligne
Manipulation de chaîne en python
Méthodes d'objet chaîne en Python
Calcul de la valeur de jeu de cisaillement en Python
Manipulation de la date des chaînes en Python
6 façons d'enchaîner des objets en Python
Créer une chaîne aléatoire en Python
Chaîne Python
Comparaison des modules de conversion japonais en Python3
Générer une classe à partir d'une chaîne en Python
Python: prétraitement dans l'apprentissage automatique: conversion de données
Quadtree en Python --2
Python en optimisation
CURL en Python
Python: combinaison de chaînes
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Format de chaîne Python
SendKeys en Python
tranche de chaîne python
Comment incorporer des variables dans des chaînes python
DL, valeur d'octet et suppression de fichier en Python3
Projet Euler # 8 "Produit maximum en chaîne numérique" en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Découvrez la fraction de la valeur saisie en python
Remarque Python: lors de l'attribution d'une valeur à une chaîne
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Type de chaîne Python2
Format de chaîne Python
Constante en Python
Python # type de chaîne
nCr en Python.
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
json.dumping None en python renvoie la chaîne null
Sortie d'une courte chaîne de caractères de type URL en Python
Quad-tree en Python
Insérer un objet dans une chaîne en Python
Réflexion en Python
Chimie avec Python
Inversion de chaîne Python