Python의 re 모듈로 정규식을 다룰 때 많은 개발자가 궁금해하는 부분 중 하나가 바로 '예외(exception) 처리'입니다. 이 글에서는 정규식 사용 시 어떤 상황에서 예외가 발생하고, 어떻게 캡처할 수 있는지 정리해 드립니다.
매치 실패 시에는 예외가 발생하지 않습니다
match() 메서드를 실행했을 때 문자열에서 패턴과 일치하는 결과를 찾지 못하면, 예외를 발생시키는 것이 아니라 None을 반환합니다. 즉, re 모듈에는 매치 결과 리스트나 매칭 객체가 비어 있을 때 예외를 던지는 함수가 존재하지 않습니다.
따라서 매치 실패 여부는 반환값이 None인지 확인하는 방식으로 처리해야 합니다.
import re
result = re.match(r'\d+', 'hello world')
if result is None:
print('일치하는 항목이 없습니다.')
else:
print('매치 성공:', result.group())re.error 예외란 무엇인가?
re 모듈에서 실제로 발생하는 예외는 re.error입니다. 이 예외는 다음과 같은 경우에 발생(raise)됩니다.
- 함수에 전달된 문자열이 유효한 정규 표현식이 아닐 때 (예: 괄호가 짝이 맞지 않는 경우)
- 정규식 컴파일 과정이나 매칭 과정에서 다른 오류가 발생했을 때
반면, 검사 대상 문자열에 패턴과 일치하는 부분이 없는 것 자체는 절대 오류로 간주되지 않습니다. 이 점이 많은 분들이 혼동하기 쉬운 부분입니다.
re.error 예외 캡처 예제
잘못된 정규식 패턴으로 인한 오류는 try-except 문으로 안전하게 캡처할 수 있습니다.
import re
try:
# 괄호가 닫히지 않은 잘못된 정규식
pattern = re.compile('(')
except re.error as e:
print(f'정규식 컴파일 오류 발생: {e}')실행 결과:
정규식 컴파일 오류 발생: missing ), unterminated subpattern at position 0정리
- 패턴과 일치하는 결과가 없어도 예외는 발생하지 않으며,
match()는None을 반환합니다. - 유효하지 않은 정규식 패턴이나 컴파일·매칭 중의 오류는
re.error예외로 발생합니다. try-except re.error구문을 활용하면 정규식 관련 오류를 안전하게 처리할 수 있습니다.