Python - поднимать исключение или нет?

1

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

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

PREFIX = 'foo_';

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

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

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

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

Теперь, для реальной проблемы:

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

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

  • 1
    Также лучше, если вы сделаете "".join([PREFIX, tablename])[:30] ; таким образом, он все равно будет работать, если вы измените длину префикса (кроме ситуации с 31 символом, на которую указывает @agf
  • 3
    также, вероятно, лучше сделать name_limit=30 чем "".join([PREFIX, tablename])[:name_limit] чтобы будущие поколения не задавались вопросом о значении 30, особенно если вы когда-либо мигрируете в другой сервер БД, который не нет этого предела
Показать ещё 2 комментария
Теги:
python-2.5

3 ответа

4
Лучший ответ

27 + 4 = 31.

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

2

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

1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню