Negação em Python


162

Estou tentando criar um diretório se o caminho não existir, mas o! operador (não) não funciona. Não sei como negar em Python ... Qual é a maneira correta de fazer isso?

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

19
A propósito, por que não usar o Python os.mkdir()?
Neil

1
Eu não estava ciente da função os.mkdir (), embora imaginei que houvesse algo assim.
David Mulder

Respostas:


229

O operador de negação em Python é not. Portanto, basta substituir o seu !com not.

Para o seu exemplo, faça o seguinte:

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

Para o seu exemplo específico (como Neil disse nos comentários), você não precisa usar o subprocessmódulo, pode simplesmente usar os.mkdir()para obter o resultado necessário, com exceção adicional ao lidar com a bondade.

Exemplo:

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

O Python prefere palavras-chave em inglês à pontuação. Use not x, ie not os.path.exists(...). O mesmo vale para &&e ||quais são ande orem Python.



1

Combinando a entrada de todos os outros (não use, sem parênteses, use os.mkdir) você obteria ...

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

1
Seu código (e o OP) é ​​um acidente esperando para acontecer - duas instâncias de uma cadeia literal longa que, presumivelmente, devem ser idênticas. E, por favor, não responda que é apenas um exemplo - é um mau exemplo para iniciantes.
John Machin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.