- [BW 18] __missing__을 사용해 키에 따라 다른 디폴트 값을 생성하는 방법2024년 10월 22일
- 31514
- 작성자
- 2024.10.22.:12
만약 defaultdict 의 기본 값을 어떤 인자가 필요한 함수로 지정하면 다음과 같이 오류가 발생한다.
from collections import defaultdict path = "/" def open_file(file_path): try: return open(file_path, 'a+b') except OSError: print(f"경로를 알 수 없습니다: {file_path}") raise files = defaultdict(open_file) handle = files[path] handle.seek(0) file_data = handle.read() >>> TypeError: open_file() missing 1 required positional argument: 'file_path'
함수는 하나의 인수가 필요한데, defaultdict를 생성할 때 인수를 같이 넣어주지 않았기 때문이다.
이를 위해 우리는 __missing__ 메서드를 구현할 수 있다.
path = "test.jpg" # 딕셔너리에 key가 없을 경우 커스텀 로직을 처리할 수 있도록 하는 클래스 class Files(dict): def __missing__(self, key): # value에 어떤 함수의 로직을 처리할 것인지 지정한다. value = open_file(key) self[key] = value return value def open_file(file_path): try: return open(file_path, 'a+b') except OSError: print(f"경로를 알 수 없습니다: {file_path}") raise files = Files() handle = files[path] handle.seek(0) file_data = handle.read() print(file_data) >>> b''
'Book > 파이썬 코딩의 기술' 카테고리의 다른 글
[BW 20] None을 반환하기보다는 예외를 발생시켜라 (0) 2024.10.23 [BW 19] 함수가 여러 값을 반환하는 경우 절대로 네 값 이상을 언패킹하지 말라 (0) 2024.10.22 [BW 14] 복잡한 기준을 사용해 정렬할 때는 key 파라미터를 사용하라 (1) 2024.10.22 [BW 13] 슬라이싱보다는 나머지를 모두 잡아내는 언패킹을 사용하라 (0) 2024.10.22 [BW 12] 스트라이드와 슬라이스를 한 식에 함께 사용하지 말라 (0) 2024.10.22 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)