with open?
Мне на ум приходит только FileNotFoundError ...
Пытался загуглить, но чета инфы мало, хотя, кмк, вопрос стандартный
man 2 open в линуксах \ бзде можешь примерный маппинг кодов ошибок посмотреть здесь https://docs.python.org/3/library/exceptions.html#os-exceptions
Там по этому вопросу вроже только OSError подходит ...
FileNotFoundError унаследован от OSError
И? Мне стоит просмотреть все ошибки OSError?
для общего развития определенно стоит
А для решения моей текущей задачи?
а ты ее озвучивал вообще?
Да Слушайте, а подскажите, как эксепшены могут вылезти, связанные с with open?
1. это не задача. 2. вылезти может OSError или его дочерние классы.
А что это? А сам OSError может вылезти? Я так понимаю, он кидает дочерние классы
может, но как правило будет один из его подклассов.
> А что это? это твоя попытка решить неозвученную задачу.
А почему тогда в доках к нему это не написано? Я скорее всего не понимаю, потому что опыта нет, но там абзац просто типа "возникает, когда появляется ошибка ОС типа "файл не найден" или "мало места" И больше к самому OSError пояснений нет А вот дальше идут дочери, среди которых есть, к примеру FileNotFound, указанный в описании OSError
Короче, пытаюсь покрыть эксепшенами и логами обычный with open Вот и всё Хотелось бы понять, какие ошибки могут вылетать в таких местах
так кто тебе запрещает ловить OSError?
Никто, но: 1. Хотелось бы разобраться, что может пойти не так при работе с файлами 2. В литературе пишут, что лучше не ловить общие вещи типа except Exception 3. На разные дочери и реагировать стоит по-разному, нет?
1. для этого как я уже сказал, ты можешь открыть список кодов ошибок системного вызова open() и пройтись по ним. 2. Не совсем верно. Базовые классы исключений типа`Exception` ты не должен ловить по месту, где ожидается конкретное исключение, но можешь ловить например на верхнем уровне, в качестве обработчика исключений по-умолчанию. 3. Исходя из постановки задачи ты сейчас не знаешь на какие исключения ты хочешь реагировать по-разному. Те исключения, для которых логика обработки известна ты должен ловить отдельно.
1. Ок. Посижу, почитай офф доки 2. Я ничего не понял вообще 3. То есть по сути надо смотреть известные мне ошибки ифами, а потом остальные на всякий оборачивать проверкой на OSError?
ну и можно напортачить с типами параметров
Ошибки обычно except FirstException: # do smth except SecondException: # do smth Итд) Не ифами перехватывают, я к этому
2. перехватывать конкретный базовый класс исключений, который бросает конкретная функция совершенно нормально 3. то есть ты например 3.1 не знаешь какое конкретное исключение ждешь, и хочешь обработать любую ошибку открытия файла. try: fp = open(...) except OSError: # ... 3.2 знаешь как обработать ситуацию когда файл не найден, тогда именно это исключение и обрабатываешь и остальные пробрасываешь наверх: try: fp = open(...) except FileNotFoundError: # ... 3.3 ты хочешь обработать ситуацию когда файл не найден одним способом а остальные исключения иначе: try: fp = open(...) except FileNotFoundError: # ... except OSError: # ...
А, ну я условно ТИпа OSError ставить финальным эксептом
А что такое "пробрасывать наверх"?
необработанные исключения всплывают вверх по стеку вызовов.
А, понял, спасибо Благодарю за помощб
Обсуждают сегодня