기본 콘텐츠로 건너뛰기

라벨이 format인 게시물 표시

When Exceptions Change: struct.Struct Boundaries

struct.Struct가 던지는 예외가 바뀌면, 내 장애 대응도 바뀐다: PR #145851 읽는 법 meta_description: CPython PR #145851은 struct.Struct의 내부 구현을 손보면서, 비ASCII 포맷 처리와 초기화되지 않은 객체의 속성 접근에서 던지는 예외 타입을 더 일관되게 정리했다. “예외 타입 하나쯤”이 테스트/에러 핸들링/호환성에서 어떤 차이를 만들 수 있는지, diff에서 어디를 보고 내 코드에 무엇을 점검할지 정리한다. meta_keywords: struct, Struct, format, ValueError, UnicodeEncodeError, UnicodeDecodeError, AttributeError, RuntimeError, CPython, PR145851, non-ASCII, surrogateescape, bytes, str, exception, 테스트, 호환성, 에러처리, 파이썬 meta_robots: index,follow 운영에서 제일 성가신 버그는 “같은 입력인데 어떤 환경에서만 터지는 것”이다. 그중에서도 예외 타입이 바뀌는 종류는 더 귀찮다. 코드는 except UnicodeEncodeError: 로 잡고 있었는데, 어느 날부터 ValueError 가 날아오고 테스트는 “정확한 예외 클래스”를 기대하고 있어서 갑자기 줄줄이 깨지고 로그/알람은 예외 이름을 키로 집계해서, 그래프가 한순간에 찢어진다 CPython PR #145851은 딱 그 종류의 변화다. 겉으로는 “구현 디테일 변경”인데, 실제로는 예외의 계약(contract) 을 조금 더 선명하게 만든다. PR이 말하는 변화 3가지(그리고 왜 실무에선 체감이 큰지) PR 페이지 요약과 diff를 보면 변화는 세 묶음으로 정리된다. 1) non-ASCII 문자열 포맷 을 넣을 때: UnicodeEncodeError 대신 ValueError 2) non-ASCII bytes 포맷 을...