У меня есть следующий код (адаптированный из примера, приведенного в Dive Into Python ), который считывает все содержимое файла в буфер.
buffer = ""
try:
file = open(postFileName, 'rU')
try:
# Read the entire POST log file into a buffer
buffer += file.read()
finally:
file.close()
except IOError:
buffer += "The POST file could not be opened."
Что беспокоит меня об этом коде, так это внутренний блок try / finally без блока исключения. Нужен ли там блок кроме? Может ли звонок на read()
завершиться неудачно после того, как звонок на open()
был успешным? Я знаю, что попытка-исключение-наконец теперь унифицирована, поэтому добавление одного, по крайней мере, синтаксически, не проблема.
Если я добавлю блок исключения, при каких условиях он будет выполняться, и как мне написать тест, чтобы убедиться, что он работает в этих условиях?
Кроме того, если мне не нужен блок исключения, тогда зачем вообще нужен внутренний блок try / finally?