문제상황:
온라인 쇼핑몰의 상품 데이터를 처리하는 코드를 작성하다가, 다음과 같은 에러가 발생했습니다. 상품 데이터는 딕셔너리 형태로 저장되어 있으며, 각 상품에 대한 정보를 추출하여 새로운 딕셔너리를 생성하려고 합니다.
에러가 발생한 코드:
def process_product_data(products):
new_product_data = {}
for product_id, data in products.items():
price = data['price']
name = data['name']
new_product_data[product_id] = {'name': name, 'price': price}
return new_product_data
products = {
1: {'name': 'T-shirt', 'price': 20},
2: {'name': 'Sweater', 'price': 30}
}
processed_data = process_product_data(products)
print(processed_data)
에러로그 내용:
KeyError: 'price'
해결방법:
에러가 수정된 코드와 수정된 부분에 대한 주석:
def process_product_data(products):
new_product_data = {}
for product_id, data in products.items():
# 수정: KeyError 방지를 위해 딕셔너리의 get() 메서드 사용
price = data.get('price')
name = data.get('name')
new_product_data[product_id] = {'name': name, 'price': price}
return new_product_data
products = {
1: {'name': 'T-shirt', 'price': 20},
2: {'name': 'Sweater', 'price': 30}
}
processed_data = process_product_data(products)
print(processed_data)
원인분석:
이 에러는 코드에서 상품 데이터 딕셔너리에서 'price' 키를 찾을 수 없을 때 발생합니다. 이 경우, 우리는 각 상품 데이터에 'price'와 'name' 키가 존재한다고 가정했지만, 실제로는 어떤 상품 데이터에 해당 키가 누락되어 있을 수 있습니다. 이로 인해, 코드가 실행되면서 KeyError가 발생하게 됩니다.
해결된 코드의 작동원리는 다음과 같습니다:
- 각 상품 데이터의 'name'과 'price' 정보를 추출하기 위해 딕셔너리의 get() 메서드를 사용합니다. 이 메서드는 키가 딕셔너리에 존재하지 않을 경우, None을 반환합니다.
- 새로운 딕셔너리에 추출한 정보를 저장합니다.
- 전체 처리된 상품 데이터를 반환합니다.
이제 이 코드는 상품 데이터에 'price' 또는 'name' 키가 누락된 경우에도 정상적으로 작동합니다. 에러를 수정하고 나서, 코드를 실행하면 다음과 같은 결과가 출력됩니다:
{1: {'name': 'T-shirt', 'price': 20}, 2: {'name': 'Sweater', 'price': 30}}
이렇게 수정된 코드를 사용하면, KeyError 문제가 해결되어 안정적으로 상품 데이터를 처리할 수 있습니다. 이러한 방식은 키가 반드시 딕셔너리에 존재한다는 것을 확신할 수 없는 경우에 특히 유용합니다. 이외에도, 데이터를 처리할 때 누락된 정보에 대한 기본값을 지정하려는 경우에도 get() 메서드를 사용할 수 있습니다.
이 글을 통해 Python에서 KeyError를 해결하는 방법을 배우셨습니다. 혹시나 비슷한 문제가 발생할 경우, 이 글을 참고하여 해결해 보세요. 기타 궁금한 점이 있거나 추가적인 정보가 필요하다면, Python 공식 문서를 참고하시기 바랍니다.