Quali sono le migliori pratiche per la creazione di eccezioni? Ho appena visto questo, e non so se dovrei essere inorridito, o come questo. Ho letto più volte nei libri che le eccezioni non dovrebbero mai contenere una stringa, perché le stringhe stesse possono generare eccezioni. Qualche vera verità a questo?Best practice per le eccezioni Python?
Fondamentalmente dalla mia comprensione degli script è che questo è stato fatto in modo che tutte le librerie Python interne avessero un formato di messaggio di errore comune (qualcosa che è disperatamente necessario) così posso capire perché inserire la stringa del messaggio di errore è una buona idea . (Quasi tutti i metodi generano eccezioni a causa della totale necessità che nulla vada oltre).
Il codice in questione è la seguente:
"""
Base Exception, Error
"""
class Error(Exception):
def __init__(self, message):
self.message = message
def __str__(self):
return "[ERROR] %s\n" % str(self.message)
def log(self):
ret = "%s" % str(self.message)
if(hasattr(self, "reason")):
return "".join([ret, "\n==> %s" % str(self.reason)])
return ret
class PCSException(Error):
def __init__(self, message, reason = None):
self.message = message
self.reason = reason
def __str__(self):
ret = "[PCS_ERROR] %s\n" % str(self.message)
if(self.reason != None):
ret += "[REASON] %s\n" % str(self.reason)
return ret
Questa è solo la punta di un iceberg, ma qualcuno mi può dare una certa comprensione in ciò che rende questo una pessima idea? O se c'è un processo/stile di codifica eccezionalmente migliore.
Penso che il modo migliore sia avere una gerarchia di eccezioni il più possibile profonda, per dare la massima informazione al programmatore. Raccomando qualcosa come questo ad esempio (dal basso verso l'alto): WrongInputError -> InputError -> GeneralInputError -> NonCriticalError -> Errore -> GeneralError -> BaseError -> WhyIsThisHappeningerror. – drozzy