2010-01-25 4 views
7

Ok, voici quelques points faciles. PyBinding est venu avec ce script:La chaîne est vide ou vide

def IsNotNull(value): 
    return value is not None 

C'est proche, mais ce que je veux c'est ceci.

bool IsNotNullOrEmpty(string value) { 
    return (value != null) && (value.Length > 0); 
} 
+0

Eh bien, .NET inclut String.IsNullOrEmpty. Cela fonctionnerait-il? – ojrac

Répondre

16

Pour vérifier si une chaîne est vide, vous devez utiliser len. Essayez ceci:

def IsNotNull(value): 
    return value is not None and len(value) > 0 
+0

Mauvais à nouveau. Avez-vous même pris la peine d'essayer ce code? –

+0

Voilà, j'ai retourné à ma réponse originale. J'ai supprimé mon post et l'ai remplacé par ce que je croyais être une solution "Pythonic", qui implique le "not not". –

+1

-1 Ceci n'est pas nécessaire en Python comme None et '' False in Python: http://docs.python.org/library/stdtypes.html#truth-value-testing –

0

je pense,

if IsNotNull(value) { 

est équivalent à

if not value: 

pour les chaînes. donc je pense que la fonction n'est pas nécessaire en python.

1
def IsNotNullString(s): 
    return bool(s) 

Rules of Python boolean conversion.

+0

Ne fonctionne pas. Les cordes vides sont toujours revenues comme vraies. –

+0

@JonathanAllen Je viens de lancer ceci dans l'interpréteur python et cela a fonctionné pour moi. Dans quelle version de python avez-vous obtenu un vrai? J'utilise 2.7.3 – Saurav

5

Vous ne devriez pas faire cela dans une fonction. Au lieu de cela, vous devez simplement utiliser:

if someStringOrNone: 
+0

Ne fonctionne pas. Les cordes vides sont toujours revenues comme vraies. –

+5

C'est la version préférée de Pythonic et elle fonctionne parfaitement pour les chaînes de Python. La seule raison pour laquelle cela pourrait ne pas fonctionner pour vous est si vous passez un certain type de .NET qui n'est pas compatible avec les chaînes Python à la fonction. –

+0

@Jonathan Je ne pense pas que vous passez une corde vide à l'épreuve. Comme Ignacio vous l'a montré, cela fonctionne pour les cordes vides. Pouvez-vous nous montrer le code où la chaîne vide évalue comme Vrai? Je pense que ce serait un bug alors. –

3

Si c'est IronPython, alors pourquoi ne pas utiliser l'implémentation par défaut de IsNullOrEmpty de System.String?

import clr 
clr.AddReference('System') 
import System 
System.String.IsNullOrEmpty('') # returns True 
System.String.IsNullOrEmpty(None) # returns True 
System.String.IsNullOrEmpty('something') # returns False