Отрицание в Python


162

Я пытаюсь создать каталог, если путь не существует, но! (не) оператор не работает. Я не уверен, как отрицать в Python ... Какой правильный способ сделать это?

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

19
Кстати, почему бы не использовать Python 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.