Я только что написал утилиту на Python, чтобы сделать то, что мне нужно (не имеет значения, но это генерировать ctags-совместимый файл тегов для внутреннего DSL).
В любом случае - я открываюи чтение файла в контексте оператора with
, и мне любопытно, как люди склонны обрабатывать сбои в этом процессе?
Мое решение -
with open(filename, 'rt') as f:
content = f.read()
matches = re.findall(REGEX, content)
if len(matches) > 0:
# do more stuff...
pass
Iпоставьте проверку соответствия вне оператора with, потому что мне нравится, когда файл закрывается и делается с.Однако, если content
никогда не будет создан, это не получится.
Мое решение состояло в том, чтобы инициализировать content
пустой строкой чуть выше этого бита кода, но у меня возникает ощущение, что я бы хотелфункция просто до конца;исключение выдается из функции или чего-то в этом роде.
В этом случае я мог бы поместить остальную часть функции в блок with
, но это расширяет область действия открытого файла.Я могу создать content
перед блоком with
, чтобы он существовал в свете сбоя.Мне любопытно, однако, какие другие решения люди хотели бы видеть (предполагая, что вопрос имеет какой-то смысл в первую очередь)?
Полагаю, мне бы хотелось что-то вроде этого:
with open(filename, 'rt') as f:
content = f.read()
else:
content = ''
matches = re.findall(REGEX, content)
Я приму идею, что мне просто нужно разобраться с этим, и оставлю файл открытым для остальной части функции, если это общий консенсус.:)