Пункт «попробуй, кроме поднятия», хорошее поведение?Python

Программы на Python
Anonymous
 Пункт «попробуй, кроме поднятия», хорошее поведение?

Сообщение Anonymous »

В прошлом я часто замечал, что пишу предложения try-Exception, подобные приведенным ниже. Основная причина этого — писать меньше кода.

Код: Выделить всё

class Synchronizer(object):
# ...

def _assert_dir(self, dirname, argname, argnum):
""" *Private*. Raises OSError if the passed string does not point
to an existing directory on the file-system. """

if not os.path.isdir(dirname):
message = 'passed `%s` argument (%d) does not point to a ' \
'directory on the file-system.'
raise OSError(message % (argname, argnum))

def synchronize(self, source_dir, dest_dir, database):

# Ensure the passed directories do exist.
try:
self._assert_dir(source_dir, 'source_dir', 2)
self._assert_dir(dest_dir, 'dest_dir', 3)
except OSError:
raise

# ...
Я делал это так, иначе мне пришлось бы писать

Код: Выделить всё

class Synchronizer(object):
# ...

def synchronize(self, source_dir, dest_dir, database):

# Ensure the passed directories do exist.
if not os.path.isdir(source_dir):
message = 'passed `source_dir` argument (2) does not point to a ' \
'directory on the file-system.'
raise OSError(message)

if not os.path.isdir(dest_dir):
message = 'passed `dest_dir` argument (3) does not point to a ' \
'directory on the file-system.'
raise OSError(message)

# ...
Мне действительно нравится идея написания методов, выполняющих операции проверки и повышения, но я вижу один большой недостаток: Удобочитаемость. Специально для редакторов, которые выполняют свертывание кода, оператор try не очень-то сообщает читателю, что происходит внутри него, а в противном случае os.path.isdir(source_dir) является довольно хорошей подсказкой.

ИМХО, предложение try-Exception необходимо, потому что оно может сбить с толку перехватчик исключения (читатель обратной трассировки), где исключение откуда.

Что вы думаете об этом дизайне? Для вас это ужасно, здорово или сбивает с толку? Или у вас есть идеи, как улучшить ситуацию?

Подробнее здесь: https://stackoverflow.com/questions/128 ... -behaviour

Вернуться в «Python»