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()
David Mulder
quelle
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.
Karl Nicoll
quelle
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.

Cat Plus Plus
quelle
12

versuchen Sie stattdessen:

if not os.path.exists(pathName):
    do this
mshell_lauren
quelle
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)
chmullig
quelle
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