From 945ce45621f794a014784a0d8aa7c7b2e07eb4c2 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 5 Feb 2025 20:09:17 +0300 Subject: [PATCH] =?UTF-8?q?dev:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B2=20converter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/converter.py | 65 +++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/src/controller/converter.py b/src/controller/converter.py index 1624052..343576c 100644 --- a/src/controller/converter.py +++ b/src/controller/converter.py @@ -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)