Si consideri il seguente codice di esempio:codice Controllo di warning di deprecazione
data = []
try:
print data[0]
except IndexError as error:
print error.message
Non c'è niente di sbagliato sintatticamente (usando Python2.7) con il codice, tranne che se si esegue python with warnings turned on, si vedrebbe un DeprecationWarning
:
$ python -W always test.py
test.py:5: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
print error.message
list index out of range
FYI, questo è perché .message
was deprecated since python2.6 and removed in python3.
Ora, mi piacerebbe trovare tutti i punti del progetto in cui .message
viene chiamato su qualsiasi istanza di eccezione utilizzando gli strumenti di analisi del codice statico. Come obiettivo finale, sto pianificando di eseguire questo controllo come parte di un'attività di controllo della qualità del codice & durante la compilazione giornaliera & e di generare un errore se la sintassi è ancora utilizzata.
È possibile? È qualcosa che è in grado di pylint
, pyflakes
o altri strumenti di analisi del codice?
ho scoperto che pep8
tool ha diversi controlli simili attuate, per esempio, has_key()
utilizzo di controllo:
$ cat test.py
my_dict = {}
print my_dict.has_key('test')
$ pep8 test.py
test.py:2:14: W601 .has_key() is deprecated, use 'in'
Come soluzione alternativa, posso trattare tutti gli avvisi come errori (come suggerito here) e fare i miei test falliscono ma questo ha i suoi svantaggi:
- ci sono altri avvisi di deprecazione provenienti da pacchetti di terze parti che non riesco a f ix
- a rigor di termini, questo richiede una copertura del 100%, che è difficile mantenere
Immagino, in altre parole, la risposta sta dicendo: "No, non c'è nessuno strumento che possa aiutarti e tu dovresti farlo da solo" :) Grazie mille per i suggerimenti! – alecxe
@alecxe Nessun problema, speravo che qualcuno potesse venire e dare una risposta facile (sembra troppo difficile per qualcosa di così semplice) ma è tutto. Non è poi così male, il codice che ti ho dato probabilmente funzionerà come script autonomo (forse potresti ottenere i nomi dei file di origine da 'sys.argv' e generare i numeri di riga con i tuoi messaggi di errore). – randomusername
Sarebbe possibile aggiungere un messaggio di avviso personalizzato? (Se sì: dove/come?) Da visualizzare ad es. di PyDev – hardmooth