기타

좋지 않은 예외처리로 인하여 디버깅이 어려워지는 경우

kimjy 2022. 2. 8. 15:20
import psycopg2
connect = psycopg2.connect(~~~)
cursor=connect.cursor()
query_output = cursor.fetchall()
query_output

위 코드를 사용하여 redshift에 쿼리를 날리면 제대로 된 값을 전달받을 수 있다.

 

from utils.redshift_data import RedshiftData
redshift_data = RedshiftData(connect, query)
data = redshift_data.get_data()

그런데 이와 같이 RedshiftData 클래스를 만들고, 쿼리를 날리면 자꾸 None 값이 리턴된다.

쿼리는 정상적인 것 같은데, 이유를 확인하는 작업에서 많은 삽질을 했다.

 결과는 아래와 같다.

 

import psycopg2
import pandas.io.sql as psql

from django.http import JsonResponse

class RedshiftData:
    def __init__(self, connect, query):
        self.connect = connect
        self.query = query

    def get_data(self):
        try:
            data = psql.read_sql_query(self.query, self.connect)
            return data

        except:
            return None

클래스 내에서는 pandas.io.sql을 사용해서 쿼리 결과를 가져오도록 되어있고, SQLAlchemy 패키지가 없었던 까닭으로 자꾸 에러가 났었다. 아마 에러메세지를 확인할 수 있었다면 디버깅이 훨씬 쉬웠겠지만, except로 모든 에러일 경우 None을 리턴하도록 했기 때문에 어떤 에러메세지도 확인하지 못했다.

 

따라서 아래와 같은 상황이었으면 에러가 없거나, 디버깅이 쉬웠지 않았을까?

1. requirements.txt에 패키지를 누락하지 않고 모두 작성

2. except로 모든 에러에 대해 예외처리하지 않고, 특정한 에러만 예외처리를 할 수 있도록 코드를 작성

 

'기타' 카테고리의 다른 글

OpenACC 디버깅 모드  (0) 2024.02.14
Json Web Token  (0) 2022.03.20