Заперечення в Python


162

Я намагаюся створити каталог, якщо шлях не існує, але! (не) оператор не працює. Я не впевнений, як заперечувати в Python ... Який правильний спосіб це зробити?

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

19
До речі, чому б не використати Python's os.mkdir()?
Ніл

1
Я не знав про функцію os.mkdir (), хоча вважав, що є щось подібне.
Девід Малдер

Відповіді:


229

Оператором заперечення в Python є not. Тому просто замінити вашу !з not.

Для вашого прикладу зробіть це:

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

Для вашого конкретного прикладу (як Ніл сказав у коментарях), вам не доведеться використовувати subprocessмодуль, ви можете просто використовувати os.mkdir()для отримання потрібного вам результату, додавши добру обробку винятків.

Приклад:

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 надає перевагу англійським ключовим словам у розділові знаки. Використання not x, тобто not os.path.exists(...). Те саме стосується &&і тих, ||що є, andі orв Python.



1

Поєднуючи дані від усіх інших (не використовуйте, немає паронів, використовуйте os.mkdir), ви отримаєте ...

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

1
Ваш код (і ОП) - це нещасний випадок, який чекає трапитися - два екземпляри довгого буквального рядка, який, мабуть, повинен бути однаковим. І, будь ласка, не розмовляйте, що це лише приклад - це БАД приклад для новачків.
Джон Махін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.