Ragionamento alla base della classe personalizzata Eccezione

-2

Sto imparando Python e quando ho imparato che possiamo creare classi personalizzate per eccezioni, sono entrato in una confusione di Why?

per esempio1:

class MyException(Exception):
      def __init__(self, error):
           self.error = error
      def __str__(self):
          # DO THE WORK TO BE DONE FOR THE EXCEPTION
          print  "Here is my custom made exception" + self.error

esempio 2:

try:
  # SOMETHING
except Exception:
  # DO THE WORK TO BE DONE FOR THE EXCEPTION
  raise Exception("Here is my custom made exception - Whats the reason ?")

Se l'esempio 2 funziona come nell'esempio 1, perché abbiamo bisogno di un'eccezione personalizzata. C'è uno scenario perché avevo bisogno di un'eccezione personalizzata quando potevo semplicemente fare tutto ciò di cui avevo bisogno, tranne il blocco.

    
posta Yogi 20.01.2018 - 22:27
fonte

3 risposte

3

Perché buttare eccezioni?

Perché è successo qualcosa che non puoi affrontare e devi dire a chiunque ti abbia chiamato così, in modo ben definito e strutturato.

Perché cattura Eccezioni?

Perché puoi fare qualcosa utile con / su di loro.

Come puoi dire che puoi gestire una particolare eccezione?

Sai cosa tipo sarà così che puoi filtrarlo da tutte le altre eccezioni che potrebbero accadere.

Assolutamente mai, mai prova a riconoscere un'eccezione basata sul suo messaggio . Se qualcun altro modifica la parola nel messaggio originale (come la traduzione in un'altra lingua), la tua applicazione si bloccherà e brucerà perché il tuo "catch" non lo riconoscerà più. Inoltre, devi prendere l'Exception prima di poter testare la sua proprietà Message e questo rende un pasticcio completo di come Structured Exception Handling dovrebbe funzionare.

Come si fa a "riparare" [la causa] dell'eccezione?

Utilizzi le proprietà aggiuntive incluse nell'eccezione personalizzata.

Se non hai bisogno di proprietà aggiuntive per correggere la causa, avrai comunque bisogno di una classe di eccezioni personalizzata (in modo che tu possa filtrarla). Solo se tutto ciò che hai intenzione di fare è registrare l'eccezione e lasciare che il programma muoia, puoi scappare senza avere una classe Exception personalizzata.

    
risposta data 22.01.2018 - 12:28
fonte
5

Il motivo principale per implementare la tua eccezione è che puoi filtrarlo. Se hai un blocco except che denomina la tua eccezione, allora non prenderà nulla tranne la tua eccezione personalizzata (e qualsiasi altra sottoclasse da quella).

    
risposta data 21.01.2018 - 02:06
fonte
4

Le eccezioni possono fare molto più che memorizzare i messaggi di stringa per l'output del registro.

Potresti programmare un sistema per i record dei pazienti e devi applicare le regole del livello di accesso di sicurezza. Ad esempio, questo potrebbe portare ad avere SecurityViolationException , che memorizza le informazioni relative all'incidente: denied_resource , infringing_employee , time , ecc. Quindi quando lanci un SecurityViolationException , lo riempirai con informazioni contestuali sull'incidente, che possono essere utilizzate lungo la catena per rispondere all'incidente in modo più accurato.

    
risposta data 21.01.2018 - 01:42
fonte

Leggi altre domande sui tag