Informasjonsforvaltning / rdf-prettifier

Apache License 2.0
1 stars 0 forks source link

Mer spesifikk exception-håndtering #10

Open tenstad opened 1 year ago

tenstad commented 1 year ago

https://github.com/Informasjonsforvaltning/rdf-prettifier/blob/21cdbf324a3d6e70ea344298d5a6188fd6f8c0a6/rdf_prettifier/main.py#L29

Forslag:

Fang rdflib-exceptions for seg selv: https://rdflib.readthedocs.io/en/stable/_modules/rdflib/exceptions.html Returner HTTPError med feilmelding.

Ved andre exceptions: logg feilmelding, kast videre/kræsj tjenesten?

# import Error from rdflib as RdfLibError
try {...}
catch (RdfLibError as e) {
  response.status_code = 400
  return HTTPError("Something went wrong during parsing of rdf" + error=str(e))
} catch (Exception as e) {
  log("Error in rdf-prettifier: " + str(e))
  throw e  
}
terjesyl commented 1 year ago

@NilsOveTen Hva er løsningen på dette issuet? Forsto ikke helt hva Amund mente.

NilsOveTen commented 1 year ago

Exception er super-klassen, bruk noe mer spesifikkt. Om du fortsatt vil bruke noe veldig generelt kan du bruke BaseException

terjesyl commented 1 year ago

@NilsOveTen Python-dokumentasjonen sier det motsatte: BaseException er superklassen og Exception arver fra denne. Står at alle exceptions man regner med programmet kan håndtere er subklasser av Exception, mens andre exceptions skal propageres videre (som KeyboardInterrupt og SystemExit). Kan finne ut hvilke exceptions Graph.parse og Graph.serialize kan kaste og gi ulike feilmeldinger basert på det, men det blir jo potensielt litt knotete/veldig forgrenet kode.

terjesyl commented 1 year ago

I tillegg kommer rdflib med egne error messages som sendes videre når en Exception fanges her. Tenker de er mer informative.

NilsOveTen commented 1 year ago

De de skriver er at du skal bruke Exception om du oppretter egne exceptions, ikke at det er den du skal bruke for å fange feil.

Står lite mtp except, sikkert er ikke noen av de to alternativene "best practice". Du kan jo feks fange de feilene som har informative meldinger først og så en generell exept etterpå. Som kun logger, men ikke videresender.