Python3.12 urlsplit 앞 공백이 사라질 때: 원본 문자열과 분해 결과를 따로 보관

Python3.12의 urlsplit 결과는 원본 문자열을 한 글자도 바꾸지 않고 보관하는 사본이 아닙니다. 공식 문서는 앞쪽 C0 제어 문자·공백을 제거하고, 줄바꿈·캐리지리턴·탭은 URL의 어느 위치에서든 제거한다고 설명합니다. 링크 수집 검수에서는 원본과 분해 결과를 다른 칸에 남겨야 합니다.
1. 원본과 geturl 결과를 같은 값으로 덮어쓰지 않기
공식 문서는 앞쪽 제어 문자·공백 제거를3.12 변경으로, ASCII 줄바꿈·탭 제거를3.10 변경으로 구분합니다. 지금 사용하는 버전의 동작을 확인하고, 화면에 보이지 않는 문자가 있었는지 원본 표현을 함께 살펴보세요. urlsplit은 URL의 안전성·유효성을 전부 검증하는 함수도 아닙니다.
from urllib.parse import urlsplit
raw = ' https://example.com/a\nb'
parts = urlsplit(raw)
print(repr(raw))
print(parts.geturl())
# 재조합 결과: https://example.com/ab실행 환경 Python3.12에서 확인한 독립 예시입니다. example.com은 예시용 주소이며 이 코드는 네트워크 요청을 보내지 않습니다.
Python3.12 공식 urlsplit 변경 사항 확인
2. 눈에 보이는 문자열만 복사하면 놓칠 수 있습니다

| 보관할 값 | 용도 | 구분할 것 |
|---|---|---|
| 원본 raw | 실제 받은 문자열 보존 | 분해한 결과로 덮어쓰지 않기 |
| repr(raw) | 줄바꿈·탭 등 관찰 | 보기용 표현과 원래 문자열 |
| parts.geturl() | 분해 결과에서 재조합한 URL | 원본과 완전 동일하다는 추정 |
검수 메모에 repr 문자열을 남기는 것은 보기 위한 방법입니다. repr 결과를 그대로 새 링크 주소로 붙여 넣는 작업과는 다릅니다. 주소를 실제로 사용할 값과 차이를 관찰하기 위한 표현을 분리하세요.
3. 링크 목록에 변화 이유를 남기기
예를 들어 목록에 원본, 분해 결과, 달라진 이유를 각각 저장할 수 있습니다. 원본에 공백이나 제어 문자가 있었다면 해당 행을 별도 검토 대상으로 남기고 어디에서 들어왔는지 확인하세요. 정리된 주소가 열리는지만 보아 원래 수집 데이터가 정확했다고 결론 내리지 않는 편이 낫습니다.
| 자체 검수표 | 예시로 적을 내용 |
|---|---|
| 입력 경로 | HTML 속성 /CSV /직접 입력 중 확인한 경로__ |
| 실행 버전 | Python 버전__ |
| 관찰 | 앞 공백__ /줄바꿈·탭 유무__ |
| 결과 | 재조합 문자열__ /차이가 난 이유__ |
| 판정 | 그대로 사용 /원본 확인 대기__ |
실제 목록에 인증값이나 개인 정보가 들어 있다면 공개 예시에 그대로 옮기지 마세요. 코드 예시는 값 자체보다 어떤 차이를 비교했는지 설명할 수 있는 비식별 예시로 만드는 것이 좋습니다.
4. 자주 묻는 질문
geturl이 달라졌으면 파싱이 실패한 건가요? 반드시 그런 뜻은 아닙니다. 문서에 설명된 처리와 입력 문자열을 먼저 대조하세요.
공백이 사라졌으니 안전한 링크인가요? 문자열 처리와 목적지·유효성 검증은 별개입니다. urlsplit의 성공만으로 모든 검증을 마쳤다고 기록하지 않습니다.
공식 자료 확인 2026.10.18: Python3.12 Library Reference, urllib.parse.urlsplit.
대표 썸네일은 AI로 제작한 개념 삽화이며 본문 설명 도표는 직접 구성했습니다.