Как игнорировать исключение и продолжить цикл в Python? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть функция python, которая добавляет каталог в zip-файл в каталоге TEMP, но когда я запускаю его, я получаю исключение -> IOError: [Errno 13] Отказано в доступе: 'NTUSER.DAT'.Конечно, у меня не будет доступа к этому файлу и после разрывов цикла исключений и выхода из приложения, поэтому я хотел знать, как заставить цикл продолжаться даже после исключения?

    import zipfile
    import sys
    import os

    _DIR_TO_ZIP = os.environ['USERPROFILE']
    _ZIPPED_FILE = os.environ['TEMP'] +"\\"  +os.environ['USERNAME'] +".zip"

    def zip_folder(folder_path, output_path):
        """Zip the contents of an entire folder (with that folder included
        in the archive). Empty subfolders will be included in the archive
        as well."""
        parent_folder = os.path.dirname(folder_path)
        # Retrieve the paths of the folder contents.
        contents = os.walk(folder_path)
        try:
            zip_file = zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED)
            for root, folders, files in contents:
                # Include all subfolders, including empty ones.
                for folder_name in folders:
                    absolute_path = os.path.join(root, folder_name)
                    relative_path = absolute_path.replace(parent_folder + '\\',
                                                          '')
                    print "Adding '%s' to archive." % absolute_path
                    zip_file.write(absolute_path, relative_path)
                for file_name in files:
                    absolute_path = os.path.join(root, file_name)
                    relative_path = absolute_path.replace(parent_folder + '\\',
                                                          '')
                    print "Adding '%s' to archive." % absolute_path
                    zip_file.write(absolute_path, relative_path)
            print "'%s' created successfully." % output_path
            zip_file.close()
        except:
            pass


    if __name__ == '__main__':
        zip_folder(_DIR_TO_ZIP, _ZIPPED_FILE)

1 Ответ

0 голосов
/ 06 февраля 2019

Если вы хотите сохранить текущую функцию:

  1. Используйте модуль tempfile, он чище и обрабатывает временные пути
  2. Просто вставьте операторы try / кроме более низкого уровня,где вы ожидаете, что некоторые элементы подданных объектов выйдут из строя.
...