Синтаксис больше не поддерживается в Python 3. Вместо этого используйте следующее.
try:
do_something()
except BaseException as e:
logger.error('Failed to do something: ' + str(e))
Пока все это заключено в блок с использованием
, вам не нужно явно вызывать Close
.
Блок using
гарантирует удаление объекта, а методы Close
и Dispose
взаимозаменяемы в BinaryWriter
. (Метод Close
просто вызывает Dispose
за кулисами.)
Putting it in a using statement as per your code example will call Dispose, which closes the underlying stream, so no. You can see this through Reflector:
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this.OutStream.Close();
}
}
Блок using автоматически закроет программу записи двоичных файлов и перевести его в состояние для сборки мусора. Использование блоков является синтаксическим сахаром для самостоятельной обработки исключений и закрытия потока.
С кодом, который у вас есть, он закроет файл после выхода из блока using, поэтому вам не нужно вызывать close явным образом.
Единственная причина не использовать оператор using было бы, если вы хотите, чтобы файл все еще был открыт после того, как вы закончили с вашим BinaryWriter, и в этом случае вы должны удерживать ссылку на него вместо того, чтобы передавать ее в конструктор, как это.
Если записывающее устройство заключено в блок using, закрытие произойдет автоматически при удалении модуля записи. Так что в этом случае вам не нужно явно закрывать писатель.