Я написал сценарий для резервного копирования файлов. Однако я только что столкнулся с проблемой. Это редко будет проблемой, но в случае, если я хочу предотвратить ненормальное поведение.Предотвращение сбоя сценария при ошибке разрешений
скрипт проверяет файлы в одном каталоге, а затем проверяет их в другом, все, что существует в первом, но не во втором, копируются, поэтому их резервное копирование.
Однако я просто попытался его один из файлов, копировать открыт в Excel, сценарий возвратил ошибку:
IOError: [Errno 13] Permission denied: 'C:\\dev\\DailyStatistics\\September\\~$Update Rates 050914.xlsx'
Я ожидаю, что это потому, что она была открыта в то время.
Как я могу изменить мой сценарий так, что если это произойдет, это вызывает эту команду:
print "One or more of the files you tried to backup were open. Please save and close the document and try again"
Это является частью сценария, который копирует файлы:
for file in source_files:
filename = file[-11:-1]
year = filename[-6:-4]
foldername = directory_mapping[filename[-8:-6]]
if not os.path.exists("W://20" + year + '/' + foldername + "/"):
os.makedirs("W://20" + year + '/' + foldername + '/')
if filename not in bfiles:
shutil.copy(file, 'W://20' + year + '/' + foldername + '/')
files_transferred = files_transferred + 1
EDIT:
Ответ Джона Звинка ниже, действительно, работает. Однако я посмотрел немного глубже в проблему и понял, что, пока ошибка поднимается, файл фактически переносится.
Я удалил все файлы из резервной копии, а затем открыл 2 исходных файла, чтобы проверить блок try/except.
За исключением обработанных и я получил 2 сообщения об ошибках, но перед закрытием документов и попыткой снова проверяю файл назначения, и оба файла там с правильным размером.
Почему python выбрасывает эту ошибку, если файлы фактически передаются правильно.
UPDATE:
Причины проблемы, описанная выше, была из-за того, как окна запирали файл. Excel создает скрытый файл, когда он имеет что-то открытое. Поскольку этот файл также соответствовал шаблону, который он пытался также скопировать.
Ошибка была вытащена на скрытый файл «темп», а не на фактический открытый файл.
Чтобы обойти это, я изменил свой метод сопоставления.
Он соответствует только файлам, заканчивающимся .xlsx
и начинающихся с ~$
. Это устранило проблему, поскольку теперь она игнорирует скрытые файлы!
Это прекрасно работает, но я заметил что-то другое. Если вы не возражаете, см. Править. –