Frage Der eleganteste Weg, um zu überprüfen, ob die Zeichenfolge in Python leer ist?


Hat Python so etwas wie eine leere String-Variable?

if myString == string.empty:

Was ist die eleganteste Art, nach leeren String-Werten zu suchen? Ich finde harte Codierung "" jedes Mal zum Überprüfen eines leeren Strings nicht so gut.


925
2018-03-05 20:09


Ursprung


Antworten:


Leere Saiten sind "falsch" was bedeutet, dass sie in einem Booleschen Kontext als falsch betrachtet werden. Sie können dies also tun:

if not myString:

Dies ist der bevorzugte Weg, wenn Sie wissen, dass Ihre Variable eine Zeichenkette ist. Wenn Ihre Variable auch ein anderer Typ sein könnte, sollten Sie sie verwenden myString == "". Siehe die Dokumentation zu Wahrheitswert Testing für andere Werte, die in Booleschen Kontexten falsch sind.


1361
2018-03-05 20:10



Von PEP 8, in dem Abschnitt "Programmierungsempfehlungen":

Verwenden Sie für Sequenzen (Strings, Listen, Tupel) die Tatsache, dass leere Sequenzen falsch sind.

Sie sollten also Folgendes verwenden:

if not some_string:

oder:

if some_string:

Nur um zu verdeutlichen, sind Sequenzen bewertet zu False oder True in einem booleschen Kontext, wenn sie leer sind oder nicht. Sie sind nicht gleich zu False oder True.


286
2018-03-05 20:12



Der eleganteste Weg wäre wahrscheinlich, einfach zu prüfen, ob es wahr oder falsch ist, z.

if not my_string:

Sie können jedoch Leerraum entfernen, weil:

 >>> bool("")
 False
 >>> bool("   ")
 True
 >>> bool("   ".strip())
 False

Dies sollte jedoch etwas expliziter sein, es sei denn, Sie wissen sicher, dass dieser String eine Art Validierung bestanden hat und eine Zeichenfolge ist, die auf diese Weise getestet werden kann.


154
2018-03-05 20:11



Ich würde die Nichtigkeit vor dem Strippen testen. Außerdem würde ich die Tatsache verwenden, dass leere Zeichenfolgen False (oder Falsy) sind. Dieser Ansatz ist ähnlich wie Apache's StringUtils.isBlank oder Guavas Strings.isNullOrEmpty

Dies würde ich verwenden, um zu testen, ob eine Zeichenfolge entweder Keine ODER Leer oder Leer ist:

def isBlank (myString):
    if myString and myString.strip():
        #myString is not None AND myString is not empty or blank
        return False
    #myString is None OR myString is empty or blank
    return True

Und das genaue Gegenteil, um zu testen, ob eine Zeichenkette nicht None NOR Empty NOR Blank ist:

def isNotBlank (myString):
    if myString and myString.strip():
        #myString is not None AND myString is not empty or blank
        return True
    #myString is None OR myString is empty or blank
    return False

Weitere prägnante Formen des obigen Codes:

def isBlank (myString):
    return not (myString and myString.strip())

def isNotBlank (myString):
    return bool(myString and myString.strip())

54
2017-07-02 14:44



Ich habe einmal etwas Ähnliches wie Barteks Antwort geschrieben und Javascript inspiriert:

def isNotEmpty(s):
    return bool(s and s.strip())

Prüfung:

print isNotEmpty("")    # False
print isNotEmpty("   ") # False
print isNotEmpty("ok")  # True
print isNotEmpty(None)  # False

25
2018-01-16 11:02



Leere oder leere Zeichenfolge testen (kürzerer Weg):

if myString.strip():
    print("it's not an empty or blank string")
else:
    print("it's an empty or blank string")

11
2018-05-09 07:45



Wenn Sie zwischen leeren und Null-Strings unterscheiden möchten, würde ich vorschlagen, zu verwenden if len(string)Ansonsten würde ich vorschlagen, einfach zu verwenden if string wie andere gesagt haben. Der Vorbehalt zu Strings voller Whitespaces gilt jedoch immer noch, also nicht vergessen strip.


9
2018-03-05 20:20



a = ''
b = '   '
a.isspace() -> False
b.isspace() -> True

6
2017-08-07 15:55