dev: добавлена обработка исключений в converter
This commit is contained in:
parent
a408710b9e
commit
945ce45621
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user