Отрицание в Python

#python #negation

#python #отрицание

Вопрос:

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

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

Комментарии:

1. Кстати, почему бы не использовать Python os.mkdir() ?

2. Я не знал о функции os.mkdir (), хотя я полагал, что что-то подобное существует.

3. Здесь лучше просто try: os.mkdir(path) обработать ошибку. Если вы сначала проверите (‘посмотрите, прежде чем переходить’), кто-то другой может создать или удалить эту папку после вашей проверки (но до того, как вы ее создадите), и все равно может возникнуть ошибка. Проверка ничего не гарантирует на момент создания. Эту идею иногда называют «легче попросить прощения, чем разрешения» . Еще лучше (но еще более специфично для этой проблемы), вы можете сделать os.makedirs(path, exist_ok=True) , чтобы создать путь и игнорировать FileExistsError .

Ответ №1:

Оператор отрицания в 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.
  

Ответ №2:

Python предпочитает английские ключевые слова пунктуации. Используйте not x , т. е. not os.path.exists(...) . То же самое касается amp;amp; и || , которые являются and и or в Python.

Комментарии:

1. docs.python.org/3/library/…

Ответ №3:

попробуйте вместо:

 if not os.path.exists(pathName):
    do this
  

Ответ №4:

Объединив входные данные от всех остальных (use not, без скобок, use os.mkdir ), вы получите…

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

Комментарии:

1. Ваш код (и операционные системы) — это случайность, ожидающая своего часа — два экземпляра слишком длинной литеральной строки, которые предположительно должны быть идентичны. И, пожалуйста, не возражайте, что это всего лишь пример — это ПЛОХОЙ пример для новичков.