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,27 +13,28 @@ 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
def _fix_headers(dataframe: pd.DataFrame) -> pd.DataFrame: def _fix_headers(dataframe: pd.DataFrame) -> pd.DataFrame:
correct_columns = [ correct_columns = [
"time", "Closing", "Electrode Force, N FE", "Electrode Force, N ME", "time", "Closing", "Electrode Force, N FE", "Electrode Force, N ME",
"Force Control FE", "Force Control ME", "Hold Position ME", "Oncomming", "Force Control FE", "Force Control ME", "Hold Position ME", "Oncomming",
"Position Control FE", "Position Control ME", "Relief", "Position Control FE", "Position Control ME", "Relief",
"Rotor Position, mm FE", "Rotor Position, mm ME", "Rotor Position, mm FE", "Rotor Position, mm ME",
"Rotor Speed, mm/s FE", "Rotor Speed, mm/s ME", "Rotor Speed, mm/s FE", "Rotor Speed, mm/s ME",
"Squeeze", "Welding", "Welding Current ME", "Welding Voltage ME" "Squeeze", "Welding", "Welding Current ME", "Welding Voltage ME"
] ]
try: try:
correct_mapping = {name.lower(): name for name in correct_columns} correct_mapping = {name.lower(): name for name in correct_columns}
new_columns = [] new_columns = []
@ -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)