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()

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.

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.



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)

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.