Если файл не открыт, строка file = open(filePath, 'w')
завершается сбоем, поэтому ничего не присваивается file
.
Затем выполняется предложение except
, но в файле ничего нет, поэтому file.close()
fails.
Предложение finally
всегда выполняется, даже если было исключение.А поскольку file
по-прежнему None, вы получаете еще одно исключение.
Вы хотите использовать else
вместо finally
для вещей, которые происходят, только если не было исключений.
try:
file = open(filePath, 'w')
except IOError:
msg = "Unable to create file on disk."
return
else:
file.write("Hello World!")
file.close()
Почему else
? Python docs говорит:
Использование условия else лучше, чем добавление дополнительного кода в предложение try, потому что это позволяет избежать случайного перехвата исключения, которое не было вызванокод защищен оператором try ... кроме
Другими словами, он не будет перехватывать IOError
при вызовах write
или close
.Это хорошо, потому что тогда причина не в том, что «Невозможно создать файл на диске» - это была бы другая ошибка, к которой ваш код не был подготовлен.Не стоит пытаться справляться с такими ошибками.