Negation in Python


162

Ich versuche ein Verzeichnis zu erstellen, wenn der Pfad nicht existiert, aber das! (nicht) Operator funktioniert nicht. Ich bin mir nicht sicher, wie ich in Python negieren soll ... Wie geht das richtig?

if (!os.path.exists("/usr/share/sounds/blues")):
        proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
        proc.wait()

19
Übrigens, warum nicht Pythons verwenden os.mkdir()?
Neil

1
Ich war mir der Funktion os.mkdir () nicht bewusst, obwohl ich dachte, dass es so etwas gibt.
David Mulder

Antworten:


229

Der Negationsoperator in Python ist not. Ersetzen Sie deshalb einfach Ihre !durch not.

Führen Sie für Ihr Beispiel Folgendes aus:

if not os.path.exists("/usr/share/sounds/blues") :
    proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
    proc.wait()

Für Ihr spezielles Beispiel (wie Neil in den Kommentaren sagte) müssen Sie das subprocessModul nicht verwenden, sondern können es einfach verwenden os.mkdir(), um das gewünschte Ergebnis zu erhalten, mit zusätzlicher Güte bei der Ausnahmebehandlung.

Beispiel:

blues_sounds_path = "/usr/share/sounds/blues"
if not os.path.exists(blues_sounds_path):
    try:
        os.mkdir(blues_sounds_path)
    except OSError:
        # Handle the case where the directory could not be created.

30

Python bevorzugt englische Schlüsselwörter gegenüber Interpunktion. Verwenden Sie not x, dh not os.path.exists(...). Das gleiche gilt für &&und ||welche sind andund orin Python.



1

Kombinieren Sie die Eingabe von allen anderen (verwenden Sie nicht, keine Parens, verwenden os.mkdirSie), die Sie erhalten würden ...

specialpathforjohn = "/usr/share/sounds/blues"
if not os.path.exists(specialpathforjohn):
    os.mkdir(specialpathforjohn)

1
Ihr Code (und die OPs) ist ein Unfall, der darauf wartet, passiert zu werden - zwei Instanzen einer länglichen Literalzeichenfolge, die vermutlich identisch sein sollte. Und bitte erwidern Sie nicht, dass es nur ein Beispiel ist - es ist ein schlechtes Beispiel für Neulinge.
John Machin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.