Problema
Ho una libreria Python che invia richieste XML a un'API esterna. Se si verifica un problema, l'API risponde con un errore contenente un codice di errore e una descrizione con dettagli di errore.
Questi errori possono essere causati da dati XML malformati, nome utente / password non validi, modifica di un attributo di sola lettura o tentativo di caricare dati che non esistono.
<Response Status="Failure" Action="LoadByName">
<Error Message="WFP-00235 The job name does not exist in the database." ErrorCode="17" AtIndex="0"/>
</Response>
Approccio attuale
Poiché non riesco a controllare la risposta che riceverò, la mia libreria gestisce attualmente eventuali eccezioni sollevando un RuntimeError
con il messaggio ricevuto dall'API.
import xml.etree.ElementTree as ElementTree
def parse_response(xml):
# Check if XML response contains any errors
if xml.find(".//Error") is not None:
raise RuntimeError(xml.find(".//Error").get("Message"))
...
RuntimeError: WFP-00235 The job name does not exist in the database.
Uno dei principali difetti con questo approccio è che ErrorCode
non viene conservata quando viene sollevata un'eccezione. Ciò rende impossibile rilevare errori API specifici, poiché ogni errore è essenzialmente un'eccezione generica .
Domanda
Come devo gestire gli errori XML che provengono da un'API esterna? Posso aumentare / catturare errori in base al loro numero di errore numerico?