Этот вопрос исключительно из любопытства. В недавнем обсуждении вопроса here, я часто задавался вопросом, почему менеджер контекста (with
) не выдает ошибку, когда люди явно закрывают файл в любом случае из-за недопонимания ... и затем я обнаружил, что вы можете позвонить close()
на файл несколько раз без ошибок, даже без использования with
.Почему вы можете закрыть() файл-объект более одного раза?
Единственное, что мы можем найти в связи с этим является here и просто вкрадчиво говорит (курсив мой):
близко()
Закройте файл. Закрытый файл больше не может быть прочитан или написан. Любая операция, которая требует, чтобы файл был открыт, поднимет значение ValueError после того, как файл будет закрыт. Адрес: close() не один раз.
Похоже, что это намеренно по дизайну, но если вы не можете выполнять какие-либо операции над закрытым файлом без исключения, мы не можем решить, почему разрешено закрытие файла несколько раз. Есть ли прецедент?
Возможно, если код был немного неаккуратным и имел 'close()' в нескольких местах, а не отслеживал состояние файла по всему ... по крайней мере, ваш код не выдавал бы исключения. – haliphax
Ha! Ты подтолкнул меня на это! Я в середине составляю почти идентичный вопрос, и просто увидел, что это всплывает как связанный вопрос. Я буду повышать вместо этого;) – elethan
@elethan Я как раз собирался сообщить вам в другой теме: P – roganjosh