dev: добавлена обработка исключений в converter

This commit is contained in:
Andrew 2025-02-05 20:09:17 +03:00
parent a408710b9e
commit 945ce45621

View File

@ -1,12 +1,8 @@
import traceback
import sys
import pandas as pd import pandas as pd
from loguru import logger from loguru import logger
from base.base import BaseDataConverter from base.base import BaseDataConverter
# FIXME: костыль для выключения предупреждения "replace deprecated" # FIXME: костыль для выключения предупреждения "replace deprecated"
pd.set_option('future.no_silent_downcasting', True) pd.set_option('future.no_silent_downcasting', True)
@ -17,15 +13,16 @@ class DataConverter(BaseDataConverter):
def _replace_bool(dataframe: pd.DataFrame) -> pd.DataFrame: def _replace_bool(dataframe: pd.DataFrame) -> pd.DataFrame:
try: try:
bool_columns = dataframe.columns[dataframe.isin([True, False]).all()] bool_columns = dataframe.columns[dataframe.isin([True, False]).all()]
dataframe[bool_columns] = dataframe[bool_columns].replace({True: 1, False: 0}) dataframe.loc[:, bool_columns] = dataframe.loc[:, bool_columns].replace({True: 1, False: 0})
return dataframe return dataframe
except: except AttributeError as e:
# TODO: Обработка исключений! logger.error(f"_replace_bool - AttributeError: Проверьте, что переданный объект является DataFrame. {e}")
# TODO: Осмысленное сообщение в лог. Без traceback и прочего подобного. return None
tb = sys.exc_info()[2] except (TypeError, ValueError) as e:
tbinfo = traceback.format_tb(tb)[0] logger.error(f"_replace_bool - Ошибка типа или значения: {e}")
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1]) return None
logger.error(pymsg) except Exception as e:
logger.error(f"_replace_bool - Непредвиденная ошибка: {e}")
return None return None
@staticmethod @staticmethod
@ -47,16 +44,12 @@ class DataConverter(BaseDataConverter):
dataframe.columns = new_columns dataframe.columns = new_columns
# Удаляем повторяющиеся столбцы, оставляя только первое вхождение # Удаляем повторяющиеся столбцы, оставляя только первое вхождение
dataframe = dataframe.loc[:, ~dataframe.columns.duplicated()] dataframe = dataframe.loc[:, ~dataframe.columns.duplicated()]
return dataframe return dataframe
except: except AttributeError as e:
# TODO: Обработка исключений! logger.error(f"_fix_headers - AttributeError: Проверьте, что переданный объект является DataFrame. {e}")
# TODO: Осмысленное сообщение в лог. Без traceback и прочего подобного. return None
tb = sys.exc_info()[2] except Exception as e:
tbinfo = traceback.format_tb(tb)[0] logger.error(f"_fix_headers - Непредвиденная ошибка: {e}")
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
# TODO: Осмысленное сообщение в лог. Без traceback и прочего подобного.
logger.error(pymsg)
return None return None
def convert_data(self, files: list[str]) -> None: def convert_data(self, files: list[str]) -> None:
@ -64,14 +57,14 @@ class DataConverter(BaseDataConverter):
dataframes = [pd.read_csv(file) if file != '' else None for file in files] dataframes = [pd.read_csv(file) if file != '' else None for file in files]
renamed_dataframes = list(map(self._fix_headers, dataframes)) renamed_dataframes = list(map(self._fix_headers, dataframes))
converted_dataframes = list(map(self._replace_bool, renamed_dataframes)) converted_dataframes = list(map(self._replace_bool, renamed_dataframes))
except: except FileNotFoundError as e:
# TODO: Обработка исключений! logger.error(f"convert_data - FileNotFoundError: Файл не найден. {e}")
# Get the traceback object converted_dataframes = [None]
tb = sys.exc_info()[2] except pd.errors.EmptyDataError as e:
tbinfo = traceback.format_tb(tb)[0] logger.error(f"convert_data - EmptyDataError: Файл пустой. {e}")
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1]) converted_dataframes = [None]
# TODO: Осмысленное сообщение в лог. Без traceback и прочего подобного. except Exception as e:
logger.error(pymsg) logger.error(f"convert_data - Непредвиденная ошибка: {e}")
converted_dataframes = [None] converted_dataframes = [None]
finally: finally:
self._mediator.notify(self, converted_dataframes) self._mediator.notify(self, converted_dataframes)