olvidar para comprobar un tipo
Esto no tiene mucho sentido. Rara vez necesita "verificar" un tipo. Simplemente ejecuta pruebas unitarias y si ha proporcionado el objeto de tipo incorrecto, las cosas fallan. Nunca necesitas "verificar" mucho, en mi experiencia.
tratando de llamar a un atributo y conseguir el NoneType (o cualquier otra) tiene ningún atributo x error.
Inesperado None
es un error simple. 80% de las veces, omití el return
. Las pruebas unitarias siempre revelan esto.
De los que permanecen, el 80% del tiempo, son viejos bugs debido a una "salida temprana" que devuelve None
porque alguien escribió una declaración return
incompleta. Estas estructuras if foo: return
son fáciles de detectar con pruebas unitarias. En algunos casos, deberían haber sido if foo: return somethingMeaningful
, y en otros casos, deberían haber sido if foo: raise Exception("Foo")
.
El resto son errores tontos que malinterpretan las API. Generalmente, las funciones del mutador no devuelven nada. A veces lo olvido. Las pruebas unitarias las encuentran rápidamente, ya que básicamente, nada funciona bien.
Eso cubre los casos "inesperados None
" bastante sólidamente. Fácil de probar para la unidad. La mayoría de los errores implican pruebas bastante triviales para escribir sobre algunas especies bastante obvias de errores: el retorno equivocado; no hacer una excepción
Otros errores de "no tiene ningún atributo X" son realmente desagradables cuando se utilizó un tipo totalmente erróneo. Esas son declaraciones de asignación realmente incorrectas o llamadas a función (o método) realmente incorrectas. Siempre fallan elaboradamente durante las pruebas unitarias, lo que requiere muy poco esfuerzo para solucionarlo.
Muchos de ellos son bastante inofensivos, pero si no se manejan correctamente, pueden hacer caer toda su aplicación/proceso/etc.
Um ... ¿Inofensivo? Si es un error, rezo para que baje toda mi aplicación lo más rápido posible para poder encontrarla. Un error que no bloquea mi aplicación es la situación más horrible que se pueda imaginar. "Inofensivo" no es una palabra que utilizaría para un error que no bloquea mi aplicación.
Además, consulte http://stackoverflow.com/questions/2014105/null-pattern-in-python-underused – voyager
"NoneType no tiene ningún atributo x" es como una NullPointerException en Java. No es un problema de tipeo dinámico vs. estático. – FogleBird
@FogleBird: pero Python permite más soluciones * imaginativas *) – voyager