Except

on under diary
2 minute read

현재 진행하는 프로젝트에서는 데이터는 공공데이터 api를 통하여 정보를 제공해주고 있다. 공공 데이터는 xml으로 데이터를 넘겨주기 때문에 JSON으로 파싱하여 for을 이용해서 DB에 저장한다. 그리고 DB에 있는 데이터를 프론트단의 요청에 따라 분류하여 serializer하려 데이터를 보내주는 api이다.

하지만 파라미터값을 잘못 입력하면 ‘Server Error 500’이 발생한다. 유저가 사용하는 것은 아니라서 큰 문제는 없지만 협업하는 입장에서는 오류가 발생하면 일의 속도가 느려지게 된다.

# xml을 parser 후 db 저장
def xml_parser_db_save(request):
    request.get_method = lambda: 'GET'
    response_body = urlopen(request).read()
    data = xmltodict.parse(response_body)

    try:

        item_path = data['response']['msgBody']['perforList']

        for index, item in enumerate(item_path):
            item_path_index = item_path[index]
            seq = item_path_index['seq']
            title = item_path_index['title']
            place = item_path_index['place']
            start_date = item_path_index['startDate']
            start_date_parse = dateutil.parser.parse(start_date).date()
            end_date = item_path_index['endDate']
            end_date_parse = dateutil.parser.parse(end_date).date()
            realm_name = item_path_index['realmName']
            area = item_path_index['area']
            thumbnail = item_path_index['thumbnail']
            gps_x = item_path_index['gpsX']
            gps_y = item_path_index['gpsY']

            Content.objects.get_or_create(
                seq=seq,
                title=title,
                place=place,
                start_date=start_date_parse,
                end_date=end_date_parse,
                realm_name=realm_name,
                area=area,
                thumbnail=thumbnail,
                gps_x=gps_x,
                gps_y=gps_y,
            )
            detail_get(seq)
        return data
    except KeyError:
        error_message = "유효하지 않은 파라미터 혹은 파라미터 값입니다"
        return error_message

위 코드는 공공 데이터에서 받아온 xml 데이터를 JSON으로 파싱하여 DB에 저장하는 코드이다.

공공데이터에서 파라미터 값이 잘못되면 오류가 일어나는게 아니라 데이터가 빈 값으로 들어오기 때문에 예외처리를 DB를 저장하는 부분에 선언하였다. except에 error_message를 바로 리턴해주게 하였기 때문에 서버단에서도 협업하는 사람들도 오류가 왜 일어났는지 바로 알 수 있게되었다.

diary
comments powered by Disqus