2010-01-22 12 views
9
#!/usr/bin/python 
str = "this" 
if(1): 
    print "Hi" 
else: 
    print str.any_random_function() 

Esto no falla cuando ejecuto el programa. Intenté py_compile pero eso tampoco indicó el error en el ciclo 'else'. Ahora, ¿cómo puedo compilar el programa y detectar errores de manera confiable en el código python?¿Cómo puedo verificar los errores de compilación en python?

Gracias.

+4

No creo que sea posible hacerlo en Python. Los métodos pueden agregarse dinámicamente, la excepción capturada o el método __getattr__ sobrecargado. En cualquiera de esos casos, su error dependerá totalmente de la información del tiempo de ejecución. – fserb

+0

En realidad, este ejemplo particular debe ser capturado por la pildora. – Geo

+1

No falla porque no está mal. Su módulo podría ser importado en un contexto donde 'any_random_function' está definido correctamente para la clase de cadena incorporada. –

Respuesta

5

Creo que su mejor opción sería pylint.

2

Python es un lenguaje dinámico, por lo que no puede simplemente verificar la compilación de errores como en los lenguajes estáticos (C/C++/Java). Si asigna str.any_random_function, el código anterior sería correcto (está bien, es un mal ejemplo ...).

Le sugiero que use PyDev for Eclipse que automáticamente encuentra muchos problemas comunes en su código, como falta de funciones/módulos, etc. También es compatible con pylint (opcional).

+0

Es fácil para un almacén de claves aleatorio agregar un carácter a una llamada de función. Entonces, ¿se sugiere ejecutar pylint a través de toda la base de código o tener pruebas unitarias y cobertura de código 100% para captar esa llamada de función incorrecta? Gracias por las respuestas. – stacka

+0

Lleva un tiempo acostumbrarse a la inserción de una pila, y puede generar muchos mensajes (inútiles) si no está configurada correctamente. De todos modos, como un buen ingeniero de software siempre debe apuntar al 100% de cobertura de código usando pruebas unitarias. La ventaja es que pueden ejecutarse (semi) automáticamente; los mensajes de las personas deben ser interpretados por humanos. – AndiDog

+0

Sugeriría pruebas unitarias también. –

Cuestiones relacionadas