Это действительно необходимо?
Да, проверка необходима, поскольку будут допустимые строки, которые не являются правильными регулярными выражениями. См. Документы Python по re.error
:
Исключение возникает, когда строка, переданная одной из функций здесь, не является допустимым регулярным выражением (например, она может содержать несоответствующие скобки) или когда возникает какая-либо другая ошибка во время компиляции или сопоставления.
Другие предлагали вместо этого проводить эту проверку во время отправки формы, но ради целостности данных, я думаю, вы были правы сделать это на уровне модели. Обрабатывая re.error
, вы можете поднять ValidationError
, который можно поймать на уровне отправки формы.
Есть ли более идеальный способ сделать это? Это вроде хаки.
Ваш проверочный код соответствует философии Python EAFP :
Проще просить прощения, чем разрешения. Этот общий стиль кодирования Python предполагает наличие допустимых ключей или атрибутов и перехватывает исключения, если предположение оказывается ложным. Этот чистый и быстрый стиль характеризуется наличием множества операторов try
и except
. Техника контрастирует со стилем LBYL , общим для многих других языков, таких как C.
Я также не вижу встроенного способа проверки строки как шаблона регулярного выражения без попытки ее использования или компиляции. Однако я бы предложил создать поле пользовательской модели для шаблонов регулярных выражений, чтобы вы могли инкапсулировать эту проверку и потенциально использовать эту функциональность в других моделях.