Negación en Python


162

Estoy tratando de crear un directorio si la ruta no existe, pero el! (no) el operador no funciona. No estoy seguro de cómo negar en Python ... ¿Cuál es la forma correcta de hacer esto?

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

19
Por cierto, ¿por qué no usar Python os.mkdir()?
Neil

1
No tenía conocimiento de la función os.mkdir (), aunque supuse que había algo así.
David Mulder

Respuestas:


229

El operador de negación en Python es not. Por lo tanto, simplemente reemplace su !con not.

Para su ejemplo, haga esto:

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

Para su ejemplo específico (como dijo Neil en los comentarios), no tiene que usar el subprocessmódulo, simplemente puede usarlo os.mkdir()para obtener el resultado que necesita, con la bondad de manejo de excepciones adicional.

Ejemplo:

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 prefiere las palabras clave en inglés a la puntuación. Uso not x, es decir not os.path.exists(...). Lo mismo ocurre con &&y ||cuáles son andy oren Python.



1

Combinando la entrada de todos los demás (use not, no parens, use os.mkdir) obtendría ...

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

1
Su código (y los OP) es un accidente que espera suceder, dos instancias de una cadena literal más larga que presumiblemente debería ser idéntica. Y por favor no respondas que es solo un ejemplo, es un MAL ejemplo para los novatos.
John Machin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.