Python os.path.isdir имеет значение True, но os.listdir выдает «Нет такого файла или каталога»

#python

#python

Вопрос:

Мой скрипт на python выдает ошибку os.listdir , но os.path.isdir указывает, что целевое местоположение действительно является путем:

 import os
path = '/Volumes/WD Elements/photofix/organized-photos/2003'
os.path.isdir(path) # => True
os.listdir(path) # => OSError: [Errno 2] No such file or directory: '/Volumes/WD Elements/photofix/organized-photos/2003'
  

Когда я ls указываю путь в bash, команда выполняется без ошибок:

 ls '/Volumes/WD Elements/photofix/organized-photos/2003'
echo $? # => 0
ls -ld '/Volumes/WD Elements/photofix/organized-photos/2003'
# => drwxr-xr-x  29 JellicleCat  staff  986 Apr  4 22:19 /Volumes/WD Elements/photofix/organized-photos/2003
  

Указывает ли это на ошибку Python? Аппаратный сбой? Ошибка ОС?

Python 2.7.16 на macOS High Sierra

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

1. Похоже, что это может быть ошибка, к сожалению, вы используете python 2.7, который больше не поддерживается, поэтому отправлять отчет об ошибке некуда. Если ваш код совместим, перейдите к python 3.x и запустите код. Единственное, что это может быть, основано на имени, если это символическая ссылка на папку, которая может не работать, но я не уверен.

2. По крайней мере, вы должны протестировать с использованием Python 2.7.18 (который был последним выпуском). Если это не устраняет проблему, протестируйте последнюю версию Python 3, чтобы вы могли подтвердить, что это ошибка в Python 2.

3. Не могли бы вы опубликовать вывод ls -ld в path, чтобы мы могли видеть, что это на самом деле?

4. no such file or directory на самом деле может означать I do not have rights to read there, but I will not tell you that the directory exists to not leak information . Не уверен, что python 2.7 работает так, но это стоит проверить.

5. В некоторых версиях 2.7 у python были проблемы с отображением данных символических os.listdir() ссылок, возможно, это проблема

Ответ №1:

Я наткнулся на точно такую же проблему, которая вызвала следующее сообщение об ошибке:

 [ERROR]FileNotFoundError raised while getting the package builder: [WinError 3] The system cannot find the path specified:
  

Следующий скрипт представляет собой минимальный рабочий пример, который воспроизводит ошибку.

 import os

some_dir = "C:<WHATEVER PATH IS CAUSING YOU GRIEF>"
some_dir = os.path.normpath(some_dir)
print(f'some_dir: {some_dir}')
if os.path.exists(some_dir):
    some_dir_files = os.listdir(some_dir)
    print(f"files: {','.join(some_dir_files)}")
  

После некоторого копания я заметил, что а) some_dir указывает на символическую ссылку на каталог, б) в символической ссылке отсутствуют некоторые разрешения.

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

1. Аккуратно! В следующий раз, когда я получу доступ к своей машине, я посмотрю, та ли у меня причина