Come si assegnano i codici di errore?

12

In che modo, quando sviluppi un progetto di medie dimensioni, identifichi, crei e mantenga i codici di errore?

Per la vita di me non riesco a pensare a un metodo semplice e pulito per farlo. Alcune delle mie idee convertono i nomi delle classi e dei metodi in una stringa intera, ma questo è troppo tempo per mostrare all'utente il fatto che i nomi dei metodi e dei nomi delle classi possono cambiare (si spera di no!). Altri usano solo un sistema di registrazione incrementale (ad esempio quando creo un nuovo messaggio di errore, aggiungi 1 all'ultima id del messaggio di errore). Ma questo è completamente non organizzato.

Per essere più specifici, sto parlando di codice di errore come:

Error 401 Unauthorized.

    
posta ahodder 02.08.2011 - 22:05
fonte

4 risposte

16

No.

I codici di errore sono un anacronismo, derivano da vecchi tempi in cui l'output era davvero difficile e costoso, e l'unico modo per segnalare una condizione di errore può essere stato attraverso un gruppo di luci del pannello frontale:

In questi giorni, abbiamo una gestione delle eccezioni matura incorporata in quasi tutte le lingue tradizionali. Usalo. Fornisci all'utente le informazioni su cui possono lavorare; non infastidirli con tecniche bla bla, ma piuttosto dirgli approssimativamente cosa è andato storto e cosa possono fare al riguardo. Per la registrazione, è sufficiente fornire i nomi descrittivi delle eccezioni e registrare il nome. Più facile da ricordare e anche più facile da trovare utilizzando grep o strumenti di ricerca simili.

L'eccezione è, ovviamente, quando si programma per situazioni in cui l'output è ancora difficile e costoso, come sistemi integrati o protocolli di rete. HTTP utilizza ancora codici di risposta numerici perché sono estremamente facili da analizzare in modo efficiente - in alcune situazioni, la sola lettura della prima cifra può già dirvi abbastanza e puoi scartare il resto del pacchetto.

    
risposta data 02.08.2011 - 22:27
fonte
6

Dovresti controllare come i codici di errore / stato sono organizzati in protocolli comuni come HTTP . Riservano intervalli distinti per diversi tipi di stati / errori. Ciò semplifica sia l'identificazione da parte degli utenti di un codice di stato sconosciuto, sia la possibilità per gli sviluppatori di assegnare un codice per un nuovo tipo di errore che non è stato gestito prima.

    
risposta data 02.08.2011 - 22:19
fonte
3

Scusa, perché usare i codici di errore?
Individua l'eccezione, collegala e offri di inviare un rapporto se il programma non può essere ripristinato .

(Supponendo che la tua lingua supporti le eccezioni.)

Le uniche informazioni pertinenti che potrebbero aiutarti a risolvere il problema sono la traccia dello stack che non ottieni con un codice di errore. (Suppongo anche che tu voglia utilizzare i codici di errore per le segnalazioni di errore e non gettarli in faccia a un utente.)

    
risposta data 02.08.2011 - 22:17
fonte
2

Assumerò un contesto procedurale (C). Se hai oggetti, un oggetto errore di solito è migliore, sia che si tratti di un'eccezione o meno.

Dovresti usare i codici di errore locali per ciascun modulo. Per una libreria è possibile avere un'intestazione speciale che elenca i codici di errore, con il numero 1, 2 ecc. (O -1, -2 se si preferisce). Assicurati di restituire sempre uno di questi codici, ad es. traduci errno nei tuoi codici. Se hai più livelli di moduli, traduci a ogni passaggio (o predefinisci un intervallo per l'errore più profondo, ad esempio i valori 1001 - 1050 provengono da quell'altro modulo).

È anche importante fornire un mezzo per tradurre il codice in una stringa. Non si dovrebbe mai segnalare solo il codice, che porta solo alla frustrazione. In realtà praticamente qualsiasi codice nella tua applicazione dovrebbe avere una funzione di traduzione delle stringhe. Ad esempio, libc ha in genere strerror e strsignal , ma purtroppo manca strwaitstatus .

    
risposta data 07.02.2012 - 22:47
fonte

Leggi altre domande sui tag