Come puoi prendere tutti gli errori di indice fuori intervallo in python?

1

Il nostro programma esegue questo tipo di operazioni centinaia di volte per molte variabili e liste diverse, quindi le utilizza in tutto il programma:

variable = values[5]

I valori dell'elenco provengono dalla riga di comando, spesso come parole, paragrafi, righe di una tabella o altro (non è importante). Il nostro problema è che il nostro programma, che è progettato per funzionare in un ciclo continuo, si ferma quando c'è un errore di indice fuori intervallo. Poiché questo viene dalla riga di comando, possiamo aspettarci questi abbastanza spesso, ma non possiamo accettare il nostro arresto del programma.

Quindi, la domanda è: come posso prendere tutti gli errori di indice fuori intervallo in python in modo che il mio programma non si fermi. Devo usare le dichiarazioni try / except ovunque eseguo le dichiarazioni di questo tipo (che sono un sacco di lavoro extra per le linee di codice 40k) o posso fare un catch in qualche modo? Il modo in cui viene gestito l'errore è importante (mi aspetto il 99% delle volte che possiamo impostarlo su NULL, ERROR o 0), ma mantenere il ciclo in esecuzione è ancora più importante.

    
posta gunslingor 19.01.2016 - 17:35
fonte

2 risposte

2

Non esiste una soluzione globale che imposta la variabile di problema su NULL e continua con il normale flusso del programma. Questo sembra essere l'unico modo:

try:
   variable=values[5]
except:
   variable='error'

Dovrai cambiare la fodera originale in una 4 fodera ovunque usi una variabile di lista. È il modo più appropriato in quanto consente una risposta specifica per diverse variabili, ma è un peccato che il tuo programma di 10.000 linee probabilmente finirà per essere 30.000 righe solo per gestire un errore di indice fuori intervallo. Inoltre, non è possibile utilizzare liste referenziate nelle equazioni per la mancanza di una gestione globale degli errori in python, che aumenterà ancora di più il volume. Ad esempio:

string_var = "first name: " + values[5] + "last name: " + values[6]

Non funzionerà per il tuo programma poiché non sei sicuro al 110% di ciò che i tuoi elenchi conterranno (solo il 99% certo). Dovrai riscriverlo utilizzando la gestione delle eccezioni discrete multiple per ogni elemento dell'elenco o un'eccezione che contiene istruzioni if per ciascun elemento dell'elenco discreto.

    
risposta data 20.01.2016 - 06:17
fonte
0

aggiungi questa funzione globale al tuo codice

def set_var(value):
    if len(value) <= 5:
        return value[5]
    else:
        return "None"

quindi puoi utilizzarlo per tutto il codice.

variable = set_var(variable)
    
risposta data 12.09.2016 - 18:15
fonte

Leggi altre domande sui tag