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
from loguru import logger
from base.base import BaseDataConverter
# FIXME: костыль для выключения предупреждения "replace deprecated"
pd.set_option('future.no_silent_downcasting', True)
@ -17,27 +13,28 @@ class DataConverter(BaseDataConverter):
def _replace_bool(dataframe: pd.DataFrame) -> pd.DataFrame:
try:
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
except:
# TODO: Обработка исключений!
# TODO: Осмысленное сообщение в лог. Без traceback и прочего подобного.
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
logger.error(pymsg)
except AttributeError as e:
logger.error(f"_replace_bool - AttributeError: Проверьте, что переданный объект является DataFrame. {e}")
return None
except (TypeError, ValueError) as e:
logger.error(f"_replace_bool - Ошибка типа или значения: {e}")
return None
except Exception as e:
logger.error(f"_replace_bool - Непредвиденная ошибка: {e}")
return None
@staticmethod
def _fix_headers(dataframe: pd.DataFrame) -> pd.DataFrame:
correct_columns = [
"time", "Closing", "Electrode Force, N FE", "Electrode Force, N ME",
"Force Control FE", "Force Control ME", "Hold Position ME", "Oncomming",
"Position Control FE", "Position Control ME", "Relief",
"Rotor Position, mm FE", "Rotor Position, mm ME",
"Rotor Speed, mm/s FE", "Rotor Speed, mm/s ME",
"Squeeze", "Welding", "Welding Current ME", "Welding Voltage ME"
]
"time", "Closing", "Electrode Force, N FE", "Electrode Force, N ME",
"Force Control FE", "Force Control ME", "Hold Position ME", "Oncomming",
"Position Control FE", "Position Control ME", "Relief",
"Rotor Position, mm FE", "Rotor Position, mm ME",
"Rotor Speed, mm/s FE", "Rotor Speed, mm/s ME",
"Squeeze", "Welding", "Welding Current ME", "Welding Voltage ME"
]
try:
correct_mapping = {name.lower(): name for name in correct_columns}
new_columns = []
@ -47,16 +44,12 @@ class DataConverter(BaseDataConverter):
dataframe.columns = new_columns
# Удаляем повторяющиеся столбцы, оставляя только первое вхождение
dataframe = dataframe.loc[:, ~dataframe.columns.duplicated()]
return dataframe
except:
# TODO: Обработка исключений!
# TODO: Осмысленное сообщение в лог. Без traceback и прочего подобного.
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
# TODO: Осмысленное сообщение в лог. Без traceback и прочего подобного.
logger.error(pymsg)
except AttributeError as e:
logger.error(f"_fix_headers - AttributeError: Проверьте, что переданный объект является DataFrame. {e}")
return None
except Exception as e:
logger.error(f"_fix_headers - Непредвиденная ошибка: {e}")
return 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]
renamed_dataframes = list(map(self._fix_headers, dataframes))
converted_dataframes = list(map(self._replace_bool, renamed_dataframes))
except:
# TODO: Обработка исключений!
# Get the traceback object
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
# TODO: Осмысленное сообщение в лог. Без traceback и прочего подобного.
logger.error(pymsg)
except FileNotFoundError as e:
logger.error(f"convert_data - FileNotFoundError: Файл не найден. {e}")
converted_dataframes = [None]
except pd.errors.EmptyDataError as e:
logger.error(f"convert_data - EmptyDataError: Файл пустой. {e}")
converted_dataframes = [None]
except Exception as e:
logger.error(f"convert_data - Непредвиденная ошибка: {e}")
converted_dataframes = [None]
finally:
self._mediator.notify(self, converted_dataframes)