Debug in Python

Quando menziono debug, questo significa che potrebbe esserci un insetto nel mezzo. Beh, non intendo un bug che si potrebbe trovare in una casa, quello che intendo è un bug di programmazione!

Prima di proseguire con questo tutorial, prendiamo alcuni termini. Definiamo brevemente cosa intendiamo per a insetto e debug

bugs

Un bug nel computing potrebbe verificarsi sia nel software che nell'hardware, ma il nostro focus qui è sul software. Permettetemi di menzionare rapidamente una credenza su dove il termine insetto potrebbe aver avuto origine. Si ritiene che il primo utilizzo del termine insetto nel calcolo era quando a vero bug (falena) è stato trovato in uno dei relè del computer Mark II. Il termine insetto è stato utilizzato anche alla fine del 19 ° secolo per descrivere glitch tecnici.

Bug nel software fanno sì che il programma produca comportamenti non voluti. È un termine comunemente usato per riferirsi a un errore con la posizione e la ragione sconosciute e possono causare problemi gravi (ad esempio il blocco di un programma).

In questa situazione, debug entra in gioco.

Debug

Bene, si può dire che il modo migliore per evitare problemi non è quello di generare bug in primo luogo. Ma sfortunatamente è piuttosto raro e non è facile generare un programma pulito dall'inizio. Avere bug è una situazione normale in cui cadrebbe.

Debug è il processo di individuazione, analisi e correzione di eventuali errori (errori) che potresti incontrare. L'obiettivo finale del debug è rimuovere tali bug e produrre un programma che funziona e si comporta come previsto. È importante notare che la maggior parte del tempo verrà speso per localizzare il bug poiché, come accennato in precedenza, originariamente ha una posizione sconosciuta.

Per avere un'idea di quanto possa essere difficile il debugging, vedi cosa ha detto Brian W. Kernighan:

Tutti sanno che il debugging è due volte più difficile della scrittura di un programma. Quindi se sei intelligente come puoi essere quando lo scrivi, come farai mai a debuggarlo?

Gestire le eccezioni Python

Un eccezione è un oggetto che indica che abbiamo un bug (errore). In altre parole, Python usa delle eccezioni per comunicare che ci sono degli errori nel programma. Questo sarebbe il localizzazione parte del processo di debug. Si riferisce a ricevere l'oggetto eccezione ed eseguire le azioni necessarie per gestire il bug maneggio l'eccezione. Questo sarebbe il analizzando e correggere passaggi nel processo di debug.

La dichiarazione di prova

Python provare l'istruzione è utilizzata per la gestione delle eccezioni e ha due forme: try / except e try / finally. Nel primo caso, il provare la clausola può essere seguita da uno o più tranne clausole, mentre nel secondo caso, può essere seguito solo da uno solo finalmente clausola.

try / except

Il try / except la sintassi è la seguente:

prova: # prova il codice di blocco eccetto: # tranne il codice di blocco

Il corpo del provare la clausola conterrà il codice che potrebbe generare un'eccezione, a condizione che, se è stata generata un'eccezione, tutte le istruzioni nel blocco vengano saltate. D'altra parte, il corpo del tranne la clausola è chiamata il gestore di eccezioni, come è usato per catturare l'eccezione. Il tranne il codice di blocco verrà eseguito solo se è stata generata un'eccezione, altrimenti il ​​blocco verrà saltato. È possibile utilizzare le eccezioni built-in come mostrato nella libreria standard Python. 

Facciamo un esempio per rendere le cose più chiare. Diciamo che ci è stato chiesto di inserire un denominatore in una formula di divisione. Poiché la divisione per zero non è consentita, scriviamo a try / except dichiarazione che verifica se c'è una divisione per zero e stampa un messaggio se si è verificato questo errore.

denominator = input ('Inserisci un valore del denominatore:') try: formula = 15 / denominatore print 'Il risultato è' + str (formula) tranne ZeroDivisionError: print 'Hai tentato di dividere per zero e non è permesso' 

Se inserisci il valore 5, per esempio, otterresti il ​​seguente risultato:

Il risultato è 3

Ora, prova ad inserire il valore 0 come input. Quale risultato otterrai in questo caso?

try / finally

try / finally è un altro modo per scrivere la dichiarazione try in Python. finalmente le clausole sono chiamate clean-up / terminazione clausole poiché devono essere sempre eseguite indipendentemente dal fatto che si sia verificata un'eccezione nel provare bloccare.

Proviamo l'esempio nella sezione precedente, ma con il finalmente clausola:

denominator = input ('Inserisci un valore del denominatore:') try: formula = 15 / denominatore print 'Il risultato è' + str (formula), infine: print 'Hai tentato di dividere per zero e non è permesso' 

Si noti che quando si inserisce il valore 5 come input, ad esempio, otterresti il ​​seguente output:

Il risultato è 3 Hai tentato di dividere per zero, il che non è permesso

La parola chiave di aumento

Il aumentare la parola chiave è un altro modo per gestire le eccezioni in Python. In questo caso, sarà possibile aumentare le proprie eccezioni, ovvero le eccezioni generate quando si verifica un problema al di fuori dell'ambito degli errori previsti.

Diamo un'occhiata a un esempio di utilizzo del aumentare parola chiave per capire di più il concetto.

prova: x = input ('Inserisci un numero compreso tra 1 e 10:') se x<1 or x>10: rilancia la stampa di eccezioni 'Grande! Mi hai ascoltato e hai inserito un numero valido 'eccetto: stampa' Il tuo numero sembra essere al di fuori dell'intervallo 1-10 '

In questo esempio, se inserisci un numero al di fuori dell'intervallo consentito, il file stampare dichiarazione nel tranne il blocco verrà eseguito.

Vai avanti, prova alcuni valori e controlla l'output.

Il modulo traceback

Python rintracciare il modulo è un altro modo per gestire le eccezioni in Python. Fondamentalmente è usato per stampare tracce di stack di un programma dopo che si è verificata un'eccezione. Il rintracciare contiene il messaggio di errore, il numero della riga che ha causato l'errore e il pila di chiamate, questa è la sequenza delle chiamate di funzione che hanno portato all'errore.

Prendiamo un esempio che genera a rintracciare:

def createException (name): raise Exception ('Sembra che' + name + 'generato un'eccezione') createException ('Abder')

Se si esegue questo script, si otterrà un output simile al seguente:

Traceback (ultima chiamata più recente): File "test.py", riga 4, in  createException ('Abder') File "test.py", riga 2, in createException raise Exception ('Sembra che' + name + 'generato un'eccezione') Eccezione: sembra che Abder abbia generato un'eccezione

Si noti che il bug (errore) è accaduto linea 2 nel CreateException funzione. Si noti inoltre che lo stack di chiamate può aiutarci a rintracciare quale chiamata ha portato all'errore, che in questo caso è la chiamata che si è verificata in linea 4.

Il tutorial si allunga e mi piacerebbe fermarmi a questo punto. Come hai visto, il debug dei programmi è davvero una cosa naturale e regolare da fare, e credo che i tipi di errori che hai visto in questo tutorial suonino familiari, non è vero??

Esistono altri modi per eseguire il debug di un programma Python e gestire le eccezioni. Un modo ben noto, ad esempio, è il affermare dichiarazione

Felice debug!