2010-09-22 6 views
16

ho trovato il seguente errore nel mio codice di questa settimana:Esistono strumenti in grado di individuare errori come questo?

import datetime 

d = datetime.date(2010,9,24) 
if d.isoweekday == 5: 
    pass 

Sì, dovrebbe essere d.isoweekday(), invece.

Lo so, se avessi avuto un test-case per questo sarei stato salvato. Confrontare una funzione con 5 non è molto utile. Oh, non sto incolpando Python per questo.

La mia domanda: ci sono strumenti in grado di individuare errori come questo?

+3

"se avessi avuto un test-case per questo". Non è questa la risposta alla tua domanda? "Scrivi un test unitario." –

+0

@ S.Lott Mi sono coperto per questa risposta. Quindi, no. :) –

+0

Ti manca il punto. Data (a) l'assenza di un test e (b) le risposte che hai, dovrai iniziare a scrivere dei test. –

risposta

7

Come alternativa, la maggior parte dei progetti di Python sono unità testato e sistema testato. Se hai entrambi (o anche solo test unitari) troverai il tuo problema insieme a quasi tutti gli altri problemi.

Come dekomote ha dichiarato, questo è valido in modo sintattico. Python è non staticamente digitato in modo che questo non possa essere rilevato come un errore. Al massimo potrebbe essere un avvertimento.

MODIFICA: Python è fortemente digitato solo il tipo viene controllato in fase di esecuzione.

+1

-1 python è fortemente digitato. Non è _staticamente_ tipizzato. Questa non è una piccola distinzione. Inoltre, non dovrebbe nemmeno essere un avvertimento perché il confronto è perfettamente valido. – aaronasterling

+0

Grazie per la correzione. Beh, non cambia molto a meno che uno strumento sia in grado di emulare un'esecuzione senza eseguire il programma. Altrimenti potrebbe essere solo un'ipotesi. – Wernight

+0

+1 per essere l'unico nelle risposte a raccomandare il test delle unità (nei commenti c'è scritto S. Lotto) – aaronasterling

3

Check out pylint potrebbe essere in grado di ottenere quello. Trovi molti errori.

+2

Non troverà questo errore. – dekomote

+0

Né [pychecker] (http://pychecker.sourceforge.net/). –

+2

Questo perché non c'è nessun errore qui. d.isoweekday == 5 è una dichiarazione valida. – dekomote

3

Bene, questo non è un errore in Python di per sé perché in Python, le funzioni sono oggetti richiamabili. È possibile rendere qualsiasi oggetto richiamabile implementando __call__. Quindi d.isoweekday == 5 è una dichiarazione valida. Questo sarà Falso.

Per quanto riguarda gli altri errori, vi suggerisco di verificare pyflakes - http://divmod.org/trac/wiki/DivmodPyflakes

Problemi correlati