Последнее обновление от 3 октября 2020 г.
В Python FileNotFoundError — это исключение, которое возникает, когда запрашиваемый файл не существует. Многие люди предполагают, что когда их программам не удается открыть файл в режиме только для чтения или удалить файл, должна быть вызвана ошибка FileNotFoundError, и им нужно будет только обработать ее. Например, некоторые люди написали бы код, похожий на:
def process_file(путь): import sys try: f = open(путь, ‘r’) # или os.remove(путь), за исключением FileNotFoundError в виде e: print(«Файл {путь} не найден!», file=sys.stderr) возвращает # обработать файл…
Однако на самом деле этот код может вызвать непредвиденные ошибки. Причина в том, что неспособность открыть файл в режиме только для чтения или удалить файл не обязательно вызвана его несуществованием. Очень часто это происходит по разным причинам: недостаточное разрешение или файл находится в каталоге. В этом случае вместо FileNotFoundError будут выданы PermissionError или IsADirectoryError. Итак, в приведенном выше примере хотелось бы перехватить их все:
def process_file(путь): import sys try: f = open(путь, ‘r’) # или os.remove(путь), за исключением FileNotFoundError: print(f»Файл {путь} не найден!», file=sys.stderr) возвращает, кроме PermissionError: print(f»Недостаточно прав на чтение {пути}!», file=sys.stderr) возвращает, кроме IsADirectoryError: print(f»{путь} — это каталог!», file=sys.stderr) возвращает # обработать файл…
Или еще проще, используйте старую добрую ошибку:
def process_file(путь): import sys try: f = открыть(путь, ‘r’), за исключением ошибки e: print(f»Не удается открыть {путь}: {e}», файл=sys.stderr) возвращает # обработать файл…