Negacja w Pythonie

162

Próbuję utworzyć katalog, jeśli ścieżka nie istnieje, ale! (nie) operator nie działa. Nie jestem pewien, jak zanegować w Pythonie ... Jaki jest właściwy sposób to zrobić?

if (!os.path.exists("/usr/share/sounds/blues")):
        proc = subprocess.Popen(["mkdir", "/usr/share/sounds/blues"])
        proc.wait()
David Mulder
źródło
19
A propos, dlaczego nie skorzystać z Pythona os.mkdir()?
Neil
1
Nie byłem świadomy funkcji os.mkdir (), chociaż pomyślałem, że coś takiego jest.
David Mulder,

Odpowiedzi:

229

Operatorem negacji w Pythonie jest not. Dlatego po prostu zastąpić !z not.

Na przykład zrób to:

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

W swoim konkretnym przykładzie (jak powiedział Neil w komentarzach), nie musisz używać subprocessmodułu, możesz po prostu użyć go, os.mkdir()aby uzyskać wymagany wynik, z dodatkową zaletą obsługi wyjątków.

Przykład:

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
źródło
30

Python woli angielskie słowa kluczowe od interpunkcji. Użyj not x, tj not os.path.exists(...). To samo dotyczy &&i ||które są andi orw Pythonie.

Cat Plus Plus
źródło
12

spróbuj zamiast tego:

if not os.path.exists(pathName):
    do this
mshell_lauren
źródło
1

Łącząc dane wejściowe od wszystkich innych (nie używaj, nie używaj, używaj os.mkdir), otrzymasz ...

specialpathforjohn = "/usr/share/sounds/blues"
if not os.path.exists(specialpathforjohn):
    os.mkdir(specialpathforjohn)
chmullig
źródło
1
Twój kod (i OP) to przypadek czekający na zdarzenie - dwa wystąpienia długiego dosłownego ciągu, który prawdopodobnie powinien być identyczny. I proszę, nie powtarzaj, że to tylko przykład - to ZŁY przykład dla początkujących.
John Machin