Исключение с плавающей точкой при использовании SQL при запуске, но не при отладке - PullRequest
0 голосов
/ 07 мая 2020

В рамках моей программы Python я создал метод, который запускает sql запросов на сервере Db2. Вот он:

def run_query(c, query, return_results=False):
    stmt = db.exec_immediate(c, query)

    if return_results:
        df = {}
        row = db.fetch_assoc(stmt)

        for key in [key.lower() for key in row.keys()]:
            df[key] = []

        while row:
            for key in [key .lower() for key in row.keys()]:
                df[key].append(row[key.upper()])

            row = db.fetch_assoc(stmt)

        return pd.DataFrame(df)

Он использует библиотеку API ibm_db и его цель - выполнить запрос SQL. Если требуются результаты, он преобразует набор результатов в фрейм данных pandas для использования в программе. Когда я запускаю программу для печати возвращенного фрейма данных с print(run_query(conn, "SELECT * FROM ppt_products;", True)), она ничего не печатает, а вместо этого выходит с этим кодом ошибки: Process finished with exit code 136 (interrupted by signal 8: SIGFPE) (кстати, я использую PyCharm Professional). Однако, когда я отлаживаю программу с помощью отладчика pydev в PyCharm, программа работает плавно и выводит желаемый результат, который должен выглядеть так:

         id brand model           url
0      2392   sdf  rtsg  asdfasdfasdf
1  23452345   sdf  rtsg  asdfasdfasdf
2      6245   sdf  rtsg  asdfasdfasdf
3      8467   sdf  rtsg  asdfasdfasdf

Я пробовал отладить исключение с плавающей запятой, но смог находите решения только для Python 2 с помощью модуля под названием fpectl , который можно использовать для включения и выключения исключений с плавающей запятой.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 09 мая 2020

Ошибка возникала только в PyCharm. Когда я запустил его из командной строки, ошибки не возникло. Это заставляет меня думать, что ошибка могла быть в механизме запуска скриптов JetBrains. Спасибо data_henrik за предложение использовать pandas .read_ sql, потому что это упростило процесс получения набора результатов из запросов SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...