Search
🌍

deer.a3.6. title: 딕셔너리에 담긴 값을 json 파일로 바꿀 때, 딕셔너리 내부에 직렬화 불가능한 타입이 포함돼 있을 수 있다. dumps 메서드의 default 인자에 함수를 전달하는 방식으로 프로그래밍하라. 여기서 kwargs 을 이용해 복잡성을 감추고, 복잡성을 이용하는 경우도 깔끔하게 핸들링하는 방법을 볼 수 있다.

🚀 prev note
♻️ prev note
🚀 next note
♻️ next note
17 more properties
딕셔너리에 담긴 값을 json 파일로 바꿀 때, 딕셔너리 내부에 직렬화 불가능한 타입이 포함돼 있을 수 있다. dumps 메서드의 default 인자에 함수를 전달하는 방식으로 프로그래밍하라(참고1).
코드(참고2,3): OpenMMLab 의 사례를 확인해 보자.
def set_default(obj): # ... if isinstance(obj, (set, range)): return list(obj) elif isinstance(obj, np.ndarray): return obj.tolist() elif isinstance(obj, np.generic): return obj.item() raise TypeError(f'{type(obj)} is unsupported for json dump') class JsonHandler(BaseFileHandler): # ... def dump_to_str(self, obj, **kwargs): kwargs.setdefault('default', set_default) return json.dumps(obj, **kwargs)
Python
복사
외부에서 전달받는 kwargs 파라미터는 당연히 딕셔너리 타입이다. 보통 이 kwargs 에는 아무 값도 들어있지 않은 상태일 가능성이 높다. 단지 이 kwargsjson.dumps() 의 키워드 인자로 다시 전달될 뿐이다. 즉, kwargs 의 키(key) ‘default’ 에 해당하는 값(value)은 json.dump() 의 선택적 인자 default=None 으로 전달된다.
우리는 이 코드 조각에서 파이썬 함수의 kwargs 기능과 dict.setdefault 메서드 사용의 아름다운 모범 사례도 공부할 수 있다. 이 dump_to_str 에서 일어나는 동작을 알고 있는 사용자가 kwargs‘default’:some_fn 을 담아 보낼 수 있다. 그럼 이 값을 덮어써서는 안된다. setdefault() 함수에서는 kwargs 에서 키가 ‘default’ 인 아이템을 가지고 있는지 먼저 확인한 뒤, 없는 경우에만 새로운 함수를 ‘default’ 키에 할당하는 작업을 깔끔하게 수행해 준다.
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
1.
None
from : 과거의 어떤 생각이 이 생각을 만들었는가?
1.
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?
1.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는가?
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되고 이어지는가?
1.
None
참고 : 레퍼런스