Ich habe Klasse namens ExcelFile, seine Aufgabe ist es, Excel-Dateien zu verwalten (lesen, extrahieren Daten und verschiedene Dinge für den Stapel).Verwalten von Ausnahmen Handhabung
Ich möchte ein System für die Verwaltung von Fehlern/Ausnahmen implementieren.
Zum Beispiel Excelfile als Methode load(), wie ein "setup"
def load(self):
"""
Setup for excel file
Load workbook, worksheet and others characteristics (data lines, header...)
:return: Setup successfully or not
:rtype: bool
Current usage
:Example:
> excefile = ExcelFile('test.xls')
> excefile.load()
True
> excefile.nb_rows()
4
"""
self.workbook = xlrd.open_workbook(self.url)
self.sheet = self.workbook.sheet_by_index(0)
self.header_row_index = self.get_header_row_index()
if self.header_row_index == None: # If file doesn't have header (or not valid)
return False
self.header_fields = self.sheet.row_values(self.header_row_index)
self.header_fields_col_ids = self.get_col_ids(self.header_fields) # Mapping between header fields and col ids
self.nb_rows = self.count_rows()
self.row_start_data = self.header_row_index + self.HEADER_ROWS
return True
Wie Sie sehen können, habe ich 2 differents Fehler auftreten können:
- Die Datei ist keine Excel-Datei (raise xlrd.XLRDError)
- Die Datei hat einen ungültigen Header (also gebe ich False zurück)
Ich möchte ein gutes Management-System von ExcelFile-Fehlern implementieren, da diese Klasse viel im Stapel verwendet wird.
Dies ist meine erste Idee für Verarbeitung, die:
Implementieren einer Standard Ausnahme
class ExcelFileException(Exception):
def __init__(self, message, type=None):
self.message = message
self.type = type
def __str__(self):
return "{} : {} ({})".format(self.__class__.__name__, self.message, self.type)
Rewrite Load-Methode
def load(self):
"""
Setup for excel file
Load workbook, worksheet and others characteristics (data lines, header...)
:return: Setup successfully or not
:rtype: bool
Current usage
:Example:
> excefile = ExcelFile('test.xls')
> excefile.load()
True
> excefile.nb_rows()
4
"""
try:
self.workbook = xlrd.open_workbook(self.url)
except xlrd.XLRDError as e:
raise ExcelFileException("Unsupported file type", e.__class__.__name__)
self.sheet = self.workbook.sheet_by_index(0)
self.header_row_index = self.get_header_row_index()
if self.header_row_index == None: # If file doesn't have header (or not valid)
raise ExcelFileException("Invalid or empty header")
self.header_fields = self.sheet.row_values(self.header_row_index)
self.header_fields_col_ids = self.get_col_ids(self.header_fields) # Mapping between header fields and col ids
self.nb_rows = self.count_rows()
self.row_start_data = self.header_row_index + self.HEADER_ROWS
return True
Und dies ist ein Beispiel in einem Rufmethode, ein großes Problem Muss ich ein Diktat namens "Bericht" mit Fehlern in Französisch, für Kundenerfolg und andere verwalten.
...
def foo():
...
file = ExcelFile(location)
try:
file.load()
except ExcelFileException as e:
log.warn(e.__str__())
if e.type == 'XLRDError'
self.report['errors'] = 'Long description of the error, in french (error is about invalid file type)'
else:
self.report['errors'] = 'Long description of the error, in french (error is about invalid header)'
...
Was denken Sie darüber? Hast du einen besseren Weg? Danke
Vielen Dank, aber ich habe eine Bedingung: 1) Die Meldung im Bericht in französisch und sehr explizit sein muss (für den Erfolg unserer Kunden und andere Mitglieder des Teams) – Alexandre
Und ist nicht ein guter wat, etwas wie das zu tun:'Alff ExcelFileException ("Fehlermeldung", "französische Beschreibung") ' – Alexandre
Wenn Sie die Fehlermeldungen irgendwo gespeichert haben, konnten Sie ein' dict' mit einer Beschreibung auf französisch für verwenden die Fehlermeldung, etwas wie 'Bericht ['Fehler']. append (your_dict_with_french_descriptions [Nachricht])' – user312016