Domanda

Per un blocco in questo modo:

try:
    #some stuff
except Exception:
    pass

pylint solleva avvertimento 'Catch "Exception"' W0703. Perché?

È stato utile?

Soluzione

E 'buona norma normalmente non prendere l'oggetto principale delle eccezioni, ma invece di prendere quelle più specifiche - ad esempio IOException

.

Considerate se un'eccezione di memoria si è verificata -. Semplicemente utilizzando "pass" non sta per lasciare il programma in buono stato

Praticamente l'unica volta che si dovrebbe prendere eccezione è al livello superiore del programma, in cui è possibile (provare a) accedere esso, visualizza un errore, e l'uscita come grazia, come si può.

Altri suggerimenti

E 'buona pratica per la cattura solo una gamma molto ristretta di tipi. 'Eccezione' è troppo generale - si finirà per catturare non solo gli errori si è previsto per, ma anche altri errori, che possono mascherare i bug nel codice che sarebbe più veloce per diagnosticare se non sono stati catturati a tutti, o forse sarebbe essere meglio trattata da un singolo gestore altissimo livello di eccezioni.

Dopo aver detto che, dal momento che python2.6, la cattura di eccezione è diventata molto più ragionevole, perché tutte le eccezioni che non si vorrebbe catturare (SystemExit, KeyboardInterrupt) ereditano non è più da Exception. Essi invece ereditano da un BaseException comune, invece. Questo è stato fatto deliberatamente al fine di rendere la cattura delle eccezioni relativamente innocuo, dato che è un idioma così comune.

per i dettagli e progetti per il futuro Vedere PEP 3110 .

perché pensa che volete prendere troppo. ed è proprio.

Eccezione sono sollevate quando si verifica qualcosa di ... eccezionale. E 'generalmente una buona cosa che il programma termina.

Si consiglia di ignorare alcune eccezioni, ma IMO non c'è nessuna buona ragione per la cattura di una base di classe del genere.

come la risposta di Greg, 'Eccezione' è una classe base e le eccezioni dovrebbero essere derivato da questa classe, si veda anche exceptions.Exception .

Ecco un molto utile elenco di errori nel pydocs

Si noti anche il modulo traceback molto utile che vi permette di scoprire dove si è verificato l'eccezione. Utilizzando solo 'eccezione: ...' vi mostrerà ciò che errore si dovrebbe miglior uso nel vostro caso. Ad esempio, provare questo codice (alternare il commento), forse si accetta che:

import traceback
#absent = 'nothing'
try:
    something = absent
except  NameError:
    traceback.print_exc()
else:
    print("you get here only when you uncomment 'absent'") 

Facendo eccezione (senza re-raising) ha 2 effetti collaterali davvero male: gli errori vengono mangiati, in modo da perdere la traccia dello stack, ma anche che Ctrl-C (o qualunque sia la chiave di rottura è sul vostro sistema operativo) anche viene gestito qui.

Il comportamento tipico dei programmi come questo è che o non possono essere fermati, o che Ctrl-c provoca il flusso di controllo per saltare avanti (al gestore di eccezioni), e poi proseguire. Allora o il codice non può essere interrotta, o avete bisogno di martellare su ctrl-c per farlo smettere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top