#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. Аккуратно! В следующий раз, когда я получу доступ к своей машине, я посмотрю, та ли у меня причина