Одна проблема, с которой я столкнулся при попытке реализовать функцию «с» в моих библиотеках, - это изысканный способ обработки исключений при сбое.Учитывая следующее:
class open_file_for_read(object):
def __init__(self):
self.filename = "./does_not_exist.txt"
self.fileobj = None
def __enter__(self):
print("Opening file %s for read" % self.filename)
self.fileobj = open(name=self.filename, mode='r')
return self.fileobj
def __exit__(self, type, value, traceback):
self.fileobj.close()
with open_file_for_read() as fh:
for li in fh.readlines():
print(li)
Каков рекомендуемый метод для обработки неизбежного «IOError: [Errno 2] Нет такого файла или каталога: исключение './does_not_exist.txt'»?Всегда есть подход «попробуй / кроме»
try:
with open_file_for_read() as fh:
except IOError:
...
except XXX:
...
...
Этот прямой подход работает, но я думаю, что он умаляет простоту использования конструкции «с».Возможно, у кого-то есть более элегантное решение?
Извинения за то, что это скорее вопрос, чем ответ, но это одна из проблем, с которой я столкнулся, пытаясь реализовать «с».