Пожалуйста, не просите Python быть похожим на PHP.Вы всегда должны явно ловить наиболее конкретную ошибку, какую только можете.Поймать и игнорировать все подобные ошибки не очень хорошая практика.Это потому, что это может скрыть другие проблемы и затруднить поиск ошибок.Но в случае RE вы должны действительно проверить значение None, которое оно возвращает.Например, ваш код:
label = re.search(r'LABEL="((?:[^"\\]|\.)*)"', line).group(1)
Вызывает ошибку AttributeError, если нет совпадения, потому что re.search
возвращает None, если совпадения нет.Но что, если было совпадение, но в вашем коде была опечатка:
label = re.search(r'LABEL="((?:[^"\\]|\.)*)"', line).roup(1)
Это также вызывает ошибку AttributeError, даже если совпадение было.Но использование исключения catchall и его игнорирование маскируют эту ошибку от вас.В этом случае вы никогда не совпадете с меткой и никогда не узнаете ее, пока не найдете ее каким-либо другим способом, например, заметив, что ваш код никогда не совпадает с меткой (но, надеюсь, у вас есть модульные тесты для этого случая ...)
Для RE обычная схема такова:
matchobj = re.search(r'LABEL="((?:[^"\\]|\.)*)"', line)
if matchobj:
label = matchobj.group(1)
Нет необходимости пытаться поймать исключение, поскольку его не будет.За исключением ... когда возникла исключительная ситуация, вызванная аналогичной опечаткой.