본문 바로가기
반응형

전체 글410

Python with에서 예외가 사라질 때: contextmanager와 raise with 안에서 발생한 예외가 호출자에게 전달되지 않는다면 컨텍스트 매니저의 예외 처리 방식을 확인하세요. @contextmanager의 yield 주변에서 예외를 잡고 다시 발생시키지 않으면 해당 예외가 처리된 것으로 끝납니다. 로그만 남기고 호출자에게 실패를 알리려면 except 안에서 raise를 사용하세요.정리 작업을 했다는 사실과 예외 전달은 별개입니다. 아래 예제는 Python 3.12.14 표준 라이브러리로 실행했습니다. 코드 블록은 앞에서부터 같은 세션에서 실행하세요. 화면의 print는 흐름을 관찰하기 위한 출력이며 실제 서비스에서는 필요한 로깅 정책에 맞춰 바꾸면 됩니다.1. 로그만 남기면 예외가 억제될 수 있습니다from contextlib import contextmanager@co.. 2026. 10. 13.
SQL 재귀 CTE가 끝나지 않을 때: 순환 참조와 깊이 제한 재귀 CTE가 끝나지 않는다면 순환 데이터와 재귀부의 종료 조건을 함께 확인하세요. UNION은 반환 행 전체를 비교하므로 노드에 depth나 경로를 붙이면 같은 노드도 새 행이 됩니다. 깊이 제한은 재귀부에서 실제로 증가하는 값에 적용하고, 순환 차단이 필요하면 방문 경로도 검사해야 합니다.이 글은 SQLite 3.53.1의 동작을 실행한 예제입니다. 다른 DBMS의 재귀 제한·경로 타입·문법으로 그대로 일반화하지 않습니다. 무한 반복하는 쿼리를 실행하는 대신 재귀 CTE 내부에 양수 행 수 제한을 넣어 안전한 작은 반례로 비교합니다.1. 세 노드가 다시 돌아오는 데이터를 만듭니다CREATE TABLE edge ( src INTEGER NOT NULL, dst INTEGER NOT NULL).. 2026. 10. 13.
pandas explode에서 행이 늘어날 때: 빈 리스트·문자열·여러 열 길이 검증 explode 뒤 행이 예상보다 많아졌다면 셀의 실제 타입, 빈 리스트, 여러 열을 펼치는 방식을 먼저 확인하세요. 빈 리스트는 행을 삭제하지 않고 결측값 한 행으로 남습니다. 리스트처럼 보이는 문자열도 자동으로 해석하지 않습니다. 짝이 있는 여러 열은 한 번의 explode(["sku", "qty"])로 함께 펼쳐야 합니다.목표는 오류 메시지를 없애는 것보다 입력 한 행이 출력 몇 행이 되는지 설명하는 것입니다. 주문 ID를 보존하고, 펼친 뒤 반복되는 주문 금액을 다시 합산하지 않는 것까지 확인하겠습니다. 아래 코드는 pandas 2.2.3·Python 3.12.14에서 같은 세션으로 실행했습니다.1. 빈 리스트와 문자열을 같은 입력에서 비교합니다import pandas as pddf = pd.Dat.. 2026. 10. 13.
Python round(2.675, 2)는 왜 2.67일까? Decimal과 반올림 규칙 round(2.675, 2)가 2.67인 것은 round의 오작동이 아닙니다. Python float가 저장한 값이 정확한 십진수 2.675보다 조금 작기 때문입니다. 십진수 입력을 정해진 규칙으로 반올림하려면 문자열에서 Decimal을 만들고 quantize에 자릿수와 규칙을 명시하세요.또 하나의 원인은 중간값 규칙입니다. Python float에 내장 round를 적용하면 정확히 절반인 경우 가까운 짝수 쪽을 선택합니다. '5면 무조건 올린다'고 기대했다면 입력 표현과 반올림 규칙이라는 두 문제를 나눠 확인해야 합니다.아래 예제는 CPython 3.12.14의 표준 라이브러리만으로 실행했습니다. 특정 결제·세금 규칙을 제시하는 글이 아니라 숫자 처리 동작을 재현하는 실습입니다. 코드 블록은 위에서부터.. 2026. 10. 12.
SQL LAST_VALUE가 현재 값을 돌려주는 이유: 프레임과 마지막 행 LAST_VALUE(value)가 그룹의 마지막 값 대신 현재 행 값을 반환한다면 ORDER BY와 윈도우 프레임을 확인하세요. 전체 그룹의 마지막 행을 보려면 프레임 끝을 UNBOUNDED FOLLOWING까지 명시하고, 같은 정렬 값이 있을 때의 순서를 고유 키로 결정하면 됩니다.함수 이름의 LAST는 '현재 프레임의 마지막 행'을 의미합니다. 가장 큰 값이나 NULL이 아닌 최신 값과는 다른 질문입니다. 아래에서는 동일한 5행으로 세 질문을 나눠 실행하고, WHERE 필터 위치까지 비교합니다.예제는 Python sqlite3에 연결된 SQLite 3.53.1에서 실행했습니다. SQLite에서 확인한 결과이며 다른 DBMS의 버전·NULL 처리 문법은 별도로 확인해야 합니다. 각 SQL은 위에서 만든.. 2026. 10. 12.
pandas merge_asof 정렬 오류 해결: 시간 키·tolerance·미래값 방지 merge_asof에서 left keys must be sorted가 나오면 먼저 시간 키 전체가 오름차순인지 확인하세요. sensor, time 순서로 묶어 정렬하면 센서가 바뀌는 경계에서 시간이 뒤로 가는 경우가 있습니다. 그룹은 by로 지정하고, 실제 결합 시간 키를 전체 오름차순으로 정렬하면 이 오류를 해결할 수 있습니다.이벤트 발생 당시 알 수 있던 가장 최근 관측값을 붙이는 실습입니다. direction='backward'는 미래 관측값을 고르지 않게 하고, tolerance는 너무 오래된 값을 제외합니다. 두 옵션은 각각 방향과 허용 간격을 정하므로 함께 판단해야 합니다.예제는 pandas 2.2.3에서 실행했습니다. 작은 정수 시간은 동일한 기준점에서 센 초 단위라고 가정합니다. 아래 코드.. 2026. 10. 12.
반응형