Cosa hanno utilizzato le persone per rilevare, registrare e segnalare più errori di convalida dei dati contemporaneamente in Python?Modo idiomatico per raccogliere e segnalare più eccezioni in Python
Sto costruendo un'applicazione in Python 3 che prima convalida i dati di input e quindi li elabora. Segnalare errori nel primo passaggio fa parte della funzionalità prevista del programma, quindi non voglio che il mio validatore rinunci alla prima eccezione. In particolare, i dati sono tabulari e voglio essere in grado di restituire - piuttosto che aumentare - un'eccezione per ogni riga della tabella che non convalida.
Un forum discussion from a couple of years ago contempla diverse soluzioni, tra cui la seguente, che sembra il più pulito a me:
errors = []
for item in data:
try:
process(item)
except ValidationError as e:
errors.append(e)
if errors:
raise MultipleValidationErrors(errors)
dove la classe MultipleValidationErrors
avrebbe un metodo appropriato __str__
per elencare le informazioni utili su tutto il ValidationErrors
in esso.
Altri consigliano di utilizzare il modulo traceback
, ma poiché le eccezioni che voglio rilevare sono errori di convalida dei dati piuttosto che errori di programma, ciò sembra inappropriato. Ottenere il modulo logging
coinvolto potrebbe essere appropriato, però.
Forse [questa domanda] (http://stackoverflow.com/questions/6470428/catch-multiple-exceptions-in-one-line-except-block) aiuterebbe – inspectorG4dget
@ inspectorG4dget: quella domanda riguarda la cattura di più tipi di eccezioni; questo riguarda catturare più istanze dello stesso tipo di eccezione. –
Il codice che elencherai funzionerà, se fa quello che vuoi, oppure potresti usare il modulo di traceback per fornire ancora più informazioni, come dici tu. In alternativa, è possibile salvare l'oggetto eccezione in una struttura dati per un utilizzo futuro o fare molte altre cose. Tutto dipende da quali sono i requisiti per rispondere alle eccezioni, che non sono chiari dalla tua domanda. –