#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.
Комментарии:
Ответ №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. Ваш код (и операционные системы) — это случайность, ожидающая своего часа — два экземпляра слишком длинной литеральной строки, которые предположительно должны быть идентичны. И, пожалуйста, не возражайте, что это всего лишь пример — это ПЛОХОЙ пример для новичков.