- Python의 raw 문자열 리터럴도 일반 문자열처럼 어휘 분석되므로 끝에 홀수 개의 백슬래시를 둘 수 없음
- r'asdf\'는 마지막 따옴표가 종료 문자로 처리되지 않아 문법 오류가 되지만, r'asdf\''는 유효하며 문자열 내용은 asdf\'가 됨
- r 접두사는 백슬래시 이스케이프의 해석만 막을 뿐, 따옴표를 구분하는 렉싱 규칙까지 바꾸지는 않음
- f-string의 중괄호 안에는 따옴표·여러 줄·주석이 들어갈 수 있어 표현식 처리에 전체 Python 파서가 필요함
- f-string 표현식은 괄호 밖의 }, !, :에서 끝나므로 lambda와 할당 표현식을 사용하려면 괄호로 감싸야 함
Raw 문자열을 끝내는 백슬래시와 따옴표
- 다음 두 줄 중 첫 번째는 문법 오류이고 두 번째는 유효함
r'asdf\'
r'asdf\''
asdf\'
- r 접두사가 있어도 raw 문자열은 일반 문자열과 같은 방식으로 어휘 분석됨
- 백슬래시 이스케이프 자체는 특별한 문자로 해석되지 않음
- 하지만 백슬래시 다음의 따옴표는 문자열 종료 문자로 취급되지 않음
- 따라서 raw 문자열 끝에는 홀수 개의 백슬래시를 둘 수 없음
- 이 규칙은 원래 구현을 단순화하기 위해 도입됨
f-string에 필요한 전체 Python 파서
f'{'}'}'
- f-string 표현식에는 따옴표뿐 아니라 여러 줄과 주석도 들어갈 수 있음
f'{67#}'
}'''
- 중괄호 안을 해석하려면 전체 Python 파서를 호출해야 하며, 표현식은 괄호 밖이면서 주석 안이 아닌 }, !, :에서 종료됨
- :도 종료 문자로 쓰이므로 lambda와 할당 표현식은 f-string 안에서 괄호가 필요함
f'{lambda: 67}' # syntax error
f'{x := 67}' # 사실상 f'{x}'와 같음