본문 바로가기

나는 이렇게 학습한다/Library22

Python JSON 직렬화 TypeError 핸들링하기 json 변환 시 타입에러 발생 아래와 같이 Decimal 타입을 json 으로 변환하는 코드가 있다고 해보자. import json from decimal import Decimal data = {"value": Decimal("123.456")} json_str = json.dumps(data) print(json_str) 이를 실행하면 다음의 에러가 발생한다. raise TypeError(f'Object of type {o.__class__.__name__} ' TypeError: Object of type Decimal is not JSON serializable 왜냐하면 json 라이브러리는 기본적으로 다음 타입들만 직렬화를 지원하기 때문이다. dict list, tuple str int, fl.. 2023. 9. 26.
Pydantic 옵션 하나로 ORM 을 DTO 모델로 변환하기 ORM 에서 DTO 로 모델 변환하기 ORM(Object-Relational Mapping) 객체를 통해 DB의 데이터를 가져왔다면 이를 DTO(Data Transfer Object)를 통해 다른 레이어로 전달하고 싶을 것이다. 이 글에서는 Pydantic 의 from_attributes=True 옵션을 활용하여 손쉽게 DTO를 생성하는 방법을 설명하고자 한다. 본론에 앞서 우선 ORM을 DTO로 변환하는 다양한 방법들을 살펴보자. (본론으로 넘어가고 싶다면 생략해도 좋다) 예를 들어 아래처럼 ORM과 DTO 모델이 명시되어 있다고 해보자. from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declar.. 2023. 8. 22.
Pydantic 의 Datetime 타입으로 날짜와 시간을 다뤄보자 Pydantic 의 네 가지 Datetime 타입 Pydantic은 데이터 유효성 검사와 데이터 클래스 설정을 간결하게 만들어주는 Python 라이브러리다. Pydantic에서는 날짜와 시간을 다루는 특별한 타입이 있는데, AwareDatetime, NaiveDatetime, PastDatetime, FutureDatetime이 바로 그것이다. 이 글을 통해 각각의 타입이 어떻게 동작하고 언제 사용되는지 확인해보자. AwareDatetime AwareDatetime은 시간대(timezone) 정보가 포함된 datetime 객체를 의미한다. 세계 각지의 시간대를 일관성 있게 처리해야 할 때 유용하게 쓸 수 있다. 사용 예시 from pydantic import BaseModel from datetime i.. 2023. 8. 21.
requests _ response 상태에 따라 raise를 할 수 있다? 외부 API로부터 받은 응답 값이 정상이 아니라면 우리는 응답이 잘못되었음을 어떻게 확인할 수 있을까? 매번 요청 때마다 응답의 상태 코드를 일일이 체크하고 핸들링해야 할까? python의 requests 라이브러리에서는 이러한 번거로움을 줄이기 위해 raise_for_status() 메서드가 있다. raise_for_status()는 응답의 상태 코드가 400 이상인 경우 HTTPError를 raise 한다. raise 를 통해 외부 모듈과의 통신상태를 확인하고 쉽게 핸들링을 할 수 있다. 사용법은 간단하다. requests 요청으로 응답받은 res 객체로부터 raise_for_status() 메서드를 호출하면 된다. url = "" res = requests.post(url) res.raise_for.. 2022. 10. 18.
파이썬으로 해외 증권거래소 개장일/휴장일 확인하는 방법 덴마크 증권거래소는 몇 시에 열릴까? 국내 증권거래소의 정보는 손쉽게 구할 수 있다. 특히 개장일/휴장일의 경우 우리가 보는 달력만으로도 알 수 있다. 하지만 해외 증권거래소는 파악이 어렵다. 각 국가별로 공휴일이 다를 수 있고 시간도 상이하다. 특히 지역 시간대로 인해 정확한 시간을 파악하는 것이 더 어렵다. 덴마크 증권거래소를 예로 들어보겠다. 덴마크 장시작 시간이 몇 시인지 알고 있는가? 정답은 한국 시간으로 16시에 열린다.(이는 서머타임 시간이며 겨울에는 17시에 열린다.) 이미 본인에게 익숙한 시장이라면 어느 정도 파악해두고 있겠지만 그럼에도 각 국가별로 정확한 개장일과 개장시간을 파악하고 있는 것은 여간 성가신일이 아니다. 이러한 문제를 Python 라이브러리 exchange_calendar.. 2022. 8. 30.
Tenacity _ 예외가 발생한 함수를 다시 실행하려면? Tenacity 란? 보통 에러나 예외처리에 의해 런타임이 종료될 때가 있다. Tenacity는 런타임 종료없이 함수를 다시 실행시켜주는 Python 라이브러리이다. 사용법 1. Tenacity 설치 pip install tenacity 2. Tenacity 라이브러리 가져오기 및 함수 작성 import tenacity def throw_error(): print("running...") raise ValueError("Errors make me stronger") if __name__ == "__main__": throw_error() 이대로 스크립트를 실행해보면 우리가 의도한대로 에러가 발생하며 곧바로 스크립트가 종료된다. running... Traceback (most recent call last.. 2022. 8. 27.