Python - поднимать исключение или нет? - PullRequest
1 голос
/ 16 августа 2011

Вот описание моей проблемы:

У меня есть задача взять несколько имен таблиц и поставить перед ними префикс, например:

PREFIX = 'foo_';

prefixed_tablename = "".join([PREFIX, tablename[:27]])

(Имя таблицы никогда не должно превышать 30 символов (некоторые ограничения Oracle DB), поэтому я беру только первые 27 символов).

Теперь иногда это может привести к дублированию имен таблиц (если отличаются только последние 3 знака имени таблицы).

Я мог бы реализовать какой-нибудь причудливый алгоритм для создания уникальных имен таблиц, но на данный момент достаточно было бы обнаружить дублирующиеся имена. Поэтому я подумал о том, чтобы сохранить их в наборе, и если создается префиксное имя таблицы, проверьте набор, чтобы увидеть, существует ли такое имя таблицы.

Теперь для задачи real :

Если обнаружен дубликат, мне нужно остановить выполнение скрипта, показывая какую-то ошибку. В Java я бы просто поднял исключение, но я не знаю, будет ли это предпочтительным способом в Python.

Должен ли я вызвать исключение или просто распечатать сообщение и выйти?

Ответы [ 3 ]

4 голосов
/ 16 августа 2011

27 + 4 = 31.

Почему бы вам не использовать исключение? Если позже вы не захотите просто выйти, а вместо этого поймать исключение и сделать что-то с ним во внешней области видимости, вам будет меньше что изменить, чем если бы вы использовали sys.exit.

2 голосов
/ 16 августа 2011

Исключения в Python на самом деле используются несколько более свободно, чем в Java (например, итераторы используют их внутренне, чтобы сигнализировать, когда итерация должна быть остановлена). Если это действительно «Исключительная» ситуация - то есть, если это не будет происходить часто, как само собой разумеющееся - тогда это идеальная ситуация, для которой необходимо создать исключение.

1 голос
/ 16 августа 2011

Я бы сказал, что вы должны поднять исключение. Если вы создадите исключение с помощью сообщения, сценарий завершит работу с сообщением так, как вы хотите, и если вы когда-нибудь захотите изменить способ обработки ошибки, может быть проще, если вы вызовете исключение. Кроме того, если вы когда-нибудь будете использовать этот код как часть более крупной программы, вы сможете решить, как обрабатывать ошибку отдельно в более крупной программе.

...